在字典中解包元组
Unpack Tuple within dictionary
为什么我的字典无法解包?
词典构建如下:
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):
你的值不是一个元组,它是一个有一个元素的列表,这是一个元组;嵌套元组有 3 个元素。因为 outer 容器只有一个元素,所以你的解包分配失败。
以下确实有效,通过添加另一层,前提是总是只有一个元素:
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
或者,去除嵌套,外部列表是多余的。
如果你的字典真的可以有多个项,那么外层列表当然不是多余的,但是你不能使用iterable unpacking 或者。您必须改为添加另一个循环:
for key, cuts in cutDict.iteritems():
for cut, fIn, fOUT in cuts:
# ...
为什么我的字典无法解包?
词典构建如下:
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):
你的值不是一个元组,它是一个有一个元素的列表,这是一个元组;嵌套元组有 3 个元素。因为 outer 容器只有一个元素,所以你的解包分配失败。
以下确实有效,通过添加另一层,前提是总是只有一个元素:
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
或者,去除嵌套,外部列表是多余的。
如果你的字典真的可以有多个项,那么外层列表当然不是多余的,但是你不能使用iterable unpacking 或者。您必须改为添加另一个循环:
for key, cuts in cutDict.iteritems():
for cut, fIn, fOUT in cuts:
# ...