python - 在字典中解包元组

标签 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): 

最佳答案

你的值不是一个元组,它是一个包含一个元素的列表,它是一个元组;嵌套元组有 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:
        # ...

关于python - 在字典中解包元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635145/

相关文章:

dictionary - 将map [string] [] string转换为yaml结构

python - 从 pandas DataFrame 中提取对的最佳方法

python - Django 中的 STATIC_URL 和 STATIC_ROOT 有什么区别?

python - 如何在python中使用mechanize将字符串输入到表单的某个部分?

python - 如何确定带有队列的Python线程是否完成了任务?

python - 缩进错误 : unexpected indent - Python 2. 7

python - dict.setdefault(key, []).append() --> 去掉附加列表

python - 将 SQL 按原样保存到 YAML

python - 使用 2 个选择标准编写查询的更好方法

python - 使用 Python 删除文件中的括号和文本