在Python中将有限的dict值解压缩为局部变量的优雅方法

Don*_*Gar 12 python

我正在寻找一种优雅的方法来从Python字典中提取一些值到本地值.

与此相当的东西,但对于更长的值列表更清晰,以及更长的键/变量名称:

d = { 'foo': 1, 'bar': 2, 'extra': 3 }
foo, bar = d['foo'], d['bar']
Run Code Online (Sandbox Code Playgroud)

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

foo, bar = d.get_tuple('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)

我可以轻松编写一个不错的函数:

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

foo, bar = get_selected_values(d, 'foo', 'bar')
Run Code Online (Sandbox Code Playgroud)

但我一直怀疑还有一些其他的内置方式.

Lev*_*sky 26

你可以做点什么

foo, bar = map(d.get, ('foo', 'bar'))
Run Code Online (Sandbox Code Playgroud)

要么

foo, bar = itemgetter('foo', 'bar')(d)
Run Code Online (Sandbox Code Playgroud)

这可以节省一些打字,但基本上和你正在做的一样(这是一件好事).

  • 或者只使用`foo,bar = itemgetter('foo','bar')(d)` (6认同)

Jon*_*nts 5

有点可怕,但是:

globals().update((k, v) for k, v in d.iteritems() if k in ['foo', 'bar'])
Run Code Online (Sandbox Code Playgroud)

请注意,虽然这是可能的 - 这是您真正不想做的事情,因为您会污染应该留在其自身内部的名称空间dict......