簡體   English   中英

從 Python 中的局部變量創建 dict 的優雅方式

[英]Elegant way to create dict from local variables in Python

我從 locals() 創建 dict 的東西是這樣的:

var1 = 1
var2 = 2
var3 = 3
...
my_dict = dict(
    var1=var1,
    var2=var2,
    var3=var3,
    ...
)

或者:

var1 = 1
var2 = 2
var3 = 3
...
keys = 'var1 var2 var3 ...'.split()
my_dict = {k: v for k, v in locals().items() if k in keys}

注意:鍵不僅是var1var2var3 ,還可能是fookey ,...

是否可以像這樣創建 class :

class LocalDict(dict):
    ...

LocalDict('var1 var2 var3') == dict(var1=var1, var2=var2, var3=var3)

實際上,這完全取決於您處理數據所需的方式。 您上面的方法是合理的,尤其是聽寫理解。 所以除了老式的方式:

{"key": "value", ... }

我會說你做得對。 如果你有一個具體的例子,你可以編輯你的問題,我會試着解決這個問題。

希望有幫助!

這個怎么樣?

var1 = 1
var2 = 2
var3 = 3
my_dict = {k: v for k, v in locals().items() if k.startswith('var')}

或者

var1 = 1
var2 = 2
var3 = 3
var4 = "abc"
my_dict = {k: v for k, v in locals().items() if isinstance(v, int) or isinstance(v, str)}

由於locals()的所有內置成員都以__開頭和結尾,因此您可以通過這些前綴和后綴將它們過濾掉。 此外,您可以使用callable過濾掉函數:

例如:

a = 1
b = 2
output = {k:v for k,v in locals().items() if not (k.startswith("__") and k.endswith("__")) and not callable(v)}
print(output) # output: {'a': 1, 'b': 2}

經過大量嘗試,以下代碼幾乎是我想要的:

class LocalDict(dict):
    def __new__(cls, spaces, attrs):
         return {k: v for k, v in spaces.items() if k in attrs.split()}

def foo():
    a = 1
    b = c = 2
    my_dict = LocalDict(locals(), 'a b c')
    return my_dict

print(foo())  # {'a': 1, 'b': 2, 'c': 2}

而且我想知道是否有某種方法不需要將locals傳遞給LocalDict class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM