簡體   English   中英

在Python中將有限的dict值解壓縮為局部變量的優雅方法

[英]Elegant way to unpack limited dict values into local variables in Python

我正在尋找一種優雅的方法來從Python字典中提取一些值到本地值。

與此相當的東西,但對於更長的值列表更清晰,以及更長的鍵/變量名稱:

d = { 'foo': 1, 'bar': 2, 'extra': 3 }
foo, bar = d['foo'], d['bar']

我原本希望得到以下內容:

foo, bar = d.get_tuple('foo', 'bar')

我可以輕松編寫一個不錯的函數:

def get_selected_values(d, *args):
    return [d[arg] for arg in args]

foo, bar = get_selected_values(d, 'foo', 'bar')

但我一直懷疑還有一些其他的內置方式。

你可以做點什么

foo, bar = map(d.get, ('foo', 'bar'))

要么

foo, bar = itemgetter('foo', 'bar')(d)

這可以節省一些打字,但基本上和你正在做的一樣(這是一件好事)。

好吧,如果你提前知道這些名字,你可以按照你的建議去做。

如果你沒有提前知道它們,那么堅持使用dict - 這就是它們的用途。

如果你堅持,另一種選擇是:

varobj = object()
for k,v in d.iteritems(): setattr(varobj,k,v)

之后,鍵將是varobj上的變量。

有點可怕,但是:

globals().update((k, v) for k, v in d.iteritems() if k in ['foo', 'bar'])

請注意,盡管這是可能的 - 這是你真的不想做的事情,因為你將污染一個應該只留在dict本身內的命名空間......

如果你在python版本中尋找優雅和性能,遺憾的是我認為你不會比以下更好:

unpack = lambda a,b,c,**kw: (a,b,c) # static

d = dict( a=1, b=2, c=3, d=4, e=5 )

a,b,c = unpack(**d)

優雅的解決方案:

d = { "foo": 123, "bar": 456, None: 789 }
foo, bar, baz = d.values()  # 123, 456, 789

請注意,未使用鍵,因此請務必正確獲取變量的順序,即它們必須與鍵插入映射的順序相匹配(自Python 3.6起,此順序保證)。 如果對訂購有疑問,請使用其他方法。

暫無
暫無

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

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