Python:为什么我不能将元组解压缩到字典中?

时间:2013-02-13 13:27:40

标签: python dictionary iterable-unpacking

为什么这不起作用?:

d["a"], d["b"] = *("foo","bar")

有没有更好的方法来实现我想要实现的目标?

3 个答案:

答案 0 :(得分:15)

如果您事先定义字典d,并从那里删除*,则会有效:

>>> d = {}
>>> d["a"], d["b"] = ("foo","bar")

事实上,你不需要在RHS上使用这些括号,所以这也有效:

>>> d['a'], d['b'] = 'foo', 'bar'

答案 1 :(得分:7)

其他人已经展示了你如何打开一个字典。但是,在回答你的问题“有更好的方法”时,我认为:

d.update(a='foo',b='bar')

更容易解析。如果您有ab 变量,则无法使用此功能,但您可以使用:

d.update({a:'foo',b:'bar'})

我认为我仍然喜欢这个版本,原因如下:

  • 它可以更好地扩展到多个(> 2)值,因为它可以更干净地分成多行(
  • 使立即明确哪个键与哪个值相关联

如果您从一个2元组的值开始,而不是在显示时保持静态,您甚至可以使用zip

d.update( zip(("a","b"),("foo","bar")) )

这无疑不如其他两个选项......

...我们刚刚介绍了您可以使用的所有3种方式dict.update:)。

答案 2 :(得分:0)

这只是一个错字(*)。这有效(在Python 2.7.3中测试):

d = dict()
d["a"], d["b"] = ("foo", "bar")