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

10 投票
3 回答
5167 浏览
提问于 2025-04-17 15:44

为什么这个不管用呢?

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

有没有更好的方法来实现我想要的效果呢?

3 个回答

0

这只是一个打字错误(就是那个*)。这个代码是可以工作的(在Python 2.7.3中测试过):

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

其他人已经展示了如何把数据解包成字典。不过,针对你问的“有没有更好的方法”,我想说:

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

这样解析起来简单多了。虽然确实,如果你有 ab变量 的话,这个方法就不适用了,但你可以用:

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

我觉得我还是更喜欢这个版本,原因有以下几点:

  • 当需要处理多个(超过2个)值时,这种方式更好,因为可以更整齐地分成多行
  • 它让你一眼就能看出哪个键对应哪个值

如果你一开始就用的是一个包含两个值的元组,而不是像你展示的那样是静态的,你甚至可以用 zip

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

虽然这确实没有前面两个选项那么好……

……我们刚刚讨论了使用 dict.update 的三种方法 :).

19

如果你事先定义一个字典 d,并且把那里的 * 去掉,这样就可以正常工作了:

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

实际上,你在右边的表达式中不需要那些括号,所以这样也可以正常工作:

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

撰写回答