[英]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.