Skip to main content
 首页 » 编程设计

python之在字典中解包元组

2025年05月04日15davidwang456

为什么我的字典无法解包?

字典构建如下:

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 

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

如果你的字典真的可以包含多个项,那么外部列表当然不是多余的,但是你也不能使用迭代解包 .您必须改为添加另一个循环:

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