【问题标题】:Too many values to unpack...but there aren't太多的值要解压...但是没有
【发布时间】:2016-12-01 18:38:19
【问题描述】:

所以 url 是一个字典,我正在迭代它的键。然后对于每个键,我试图解压该字典中的值。

for key in url:
    print len(url[key])
    for val, date in url[key]:
        print val, date

字典的格式如下:

url[key] = (['value','value2','value3'],'date')

其中一个键对应一个长度为 2 的元组。但是,我不断收到以下错误:

2

Traceback (most recent call last):
  File "insertCIF.py", line 10, in <module>
    for val, date in url[key]:
ValueError: too many values to unpack

这很有趣,因为顶部的 2 是 print length 语句的结果。那么,当我尝试解压缩 2 个值并且我验证元组的长度确实为 2 时,我如何尝试解压缩太多值?

我知道我可以使用 url.items 或 iteritems 作为解决方法(并且确实有效),但这个问题让我很好奇,我无法弄清楚或解决它。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    因为您尝试使用 for 循环迭代 url[key] 的值。为了分配值,您应该这样做:

    val, date = url[key]:
    

    【讨论】:

    • 我一发布就想通了。只要我允许,我就会接受这个作为答案。哇,我觉得自己很蠢……
    【解决方案2】:

    首先,你真正想要的是:

    val, date = url[key]
    

    你正在做的是循环一个元组,同时将每个元素解压缩到val, date

    按照您的方式循环 url[key],将获取 url[key] ´(这是您的列表)的第一个元素并将其解压缩到 val, date,它没有足够的变量 (2) 用于您的列表 ( 4 项)。

    【讨论】:

    • 谢谢,我一发布就知道了。另一个人比你早 14 秒回答,所以我接受他的回答。我觉得很愚蠢,哈哈,一定需要咖啡。再次感谢 ;-)
    猜你喜欢
    • 2012-09-27
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多