【问题标题】:'too many values to unpack', iterating over a dict. key=>string, value=>list'太多的值无法解包',迭代一个字典。键=>字符串,值=>列表
【发布时间】:2011-03-29 00:32:14
【问题描述】:

我收到too many values to unpack 错误。知道如何解决这个问题吗?

first_names = ['foo', 'bar']
last_names = ['gravy', 'snowman']

fields = {
    'first_names': first_names,
    'last_name': last_names,
}        

for field, possible_values in fields:  # error happens on this line

【问题讨论】:

    标签: python


    【解决方案1】:

    Python 3

    使用items()

    for field, possible_values in fields.items():
        print(field, possible_values)
    

    Python 2

    使用iteritems()

    for field, possible_values in fields.iteritems():
        print field, possible_values
    

    请参阅this answer 了解更多关于遍历字典的信息,例如跨 Python 版本使用 items()

    供参考,iteritems() was removed in Python 3

    【讨论】:

    • 至于为什么需要这样做,遍历字典是遍历键,而不是键/值对。
    • @jeffm 这让我很困惑。我认为这是一个 PHP foreach。
    【解决方案2】:

    对于 Python 3.x,iteritems 已被删除。请改用items

    for field, possible_values in fields.items():
        print(field, possible_values)
    

    【讨论】:

      【解决方案3】:

      您想使用iteritems。这将返回字典上的迭代器,它为您提供一个元组(键,值)

      >>> for field, values in fields.iteritems():
      ...     print field, values
      ... 
      first_names ['foo', 'bar']
      last_name ['gravy', 'snowman']
      

      您的问题是您正在循环遍历返回字典键的字段。

      >>> for field in fields:
      ...     print field
      ... 
      first_names
      last_name
      

      【讨论】:

        【解决方案4】:

        对于列表,请使用enumerate

        for field, possible_values in enumerate(fields):
            print(field, possible_values)
        

        iteritems 不适用于列表对象

        【讨论】:

        • 这至少对于 python 2.7 来说应该是一个正确的答案(经过测试)。
        • 问题是关于字典,而不是列表。无论哪种方式,这些名称都是错误的:“field”实际上是一个索引,而“possible_values”实际上是字段。
        【解决方案5】:

        您的代码中缺少fields.iteritems()

        您也可以采用其他方式,使用字典中的键获取值。

        for key in fields:
            value = fields[key]
        

        【讨论】:

          【解决方案6】:

          不能直接在字典中迭代。所以你可以通过转换成元组

          first_names = ['foo', 'bar']
          last_names = ['gravy', 'snowman']
          
          fields = {
              'first_names': first_names,
              'last_name': last_names,
                   } 
          tup_field=tuple(fields.items())
          for names in fields.items():
               field,possible_values = names
               tup_possible_values=tuple(possible_values)
               for pvalue in tup_possible_values:
                     print (field + "is" + pvalue)
          

          【讨论】:

            【解决方案7】:

            在 Python3 中,iteritems() 不再受支持

            使用.items

            for field, possible_values in fields.items():
                print(field, possible_values)
            

            【讨论】:

            • 请不要发布重复的答案。 top answer 和其他人已经在 Python 3 中覆盖了 dict.items()
            【解决方案8】:

            我只是想我会把它扔进去。我今天突然出现“要解压的值太多(预计 2 个)”。真气不过是因为在选择列表中少了一个逗号。

            CapTextureChoices = [
            ("initial", ""),
            ("Shaggy", "Shaggy"),
            ("Wrinkled", "Wrinkled"),
            ("Striate," "Striate"),
            ("Downy", "Downy")
            ]
            

            “Striate”、“Striate”之间缺少逗号是罪魁祸首

            【讨论】:

            • 这是另一个问题的答案。通常我会说单独发布,但原因是错字,我不会打扰。请阅读How to Ask
            猜你喜欢
            • 2020-05-02
            • 2019-04-21
            • 1970-01-01
            • 1970-01-01
            • 2014-11-20
            • 1970-01-01
            • 2017-03-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多