在字典中解包元组

时间:2017-04-26 13:06:33

标签: python python-2.7 dictionary iterable-unpacking

为什么这个解包不适用于我的字典?

字典的构建如下:

cutDict = {'scene1': [('scene3', 1001, 1125)]} 

我正试图解开这个:

for key, (cut, fIn, fOut) in cutDict.iteritems():   
    print key 
    print cut
    print fIn
    print fOut

但结果是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

现在我正在通过以下方式构建字典:

cutDict.setdefault(itm, [])
for cutItm in itm.cut_items_ordered:
    cutInOut = (mostcutItm, recentcutItm.cut_item_in, callcutItm.cut_item_out)
    cutDict[itm].append(cutInOut): 

1 个答案:

答案 0 :(得分:5)

你的价值不是一个元组,它是一个包含一个元素的列表,它是一个元组;嵌套元组有3个元素。由于外部容器只有一个元素,因此解包分配失败。

以下功能可以通过添加另一个图层来实现,只要总有一个元素

for key, ((cut, fIn, fOUT),) in cutDict.iteritems():

或者您可以使用列表语法:

for key, [(cut, fIn, fOUT)] in cutDict.iteritems():

演示:

>>> cutDict = {'scene1': [('scene3', 1001, 1125)]}
>>> for key, ((cut, fIn, fOUT),) in cutDict.iteritems():
...     print key, cut, fIn, fOut
...
scene1 scene3 1001 1125
>>> for key, [(cut, fIn, fOUT)] in cutDict.iteritems():
...     print key, cut, fIn, fOut
...
scene1 scene3 1001 1125

或者,删除嵌套,外部列表是多余的。

如果你的词典中确实有多个项,那么外部列表当然不是多余的,但是你不能使用可迭代的解包 。您必须添加另一个循环:

for key, cuts in cutDict.iteritems():
    for cut, fIn, fOUT in cuts:
        # ...