"解压缩的价值太多了",迭代了一个字典.key => string,value => list

tip*_*ipu 291 python

我收到了'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              
Run Code Online (Sandbox Code Playgroud)

Phi*_*ham 427

你需要使用像iteritems这样的东西.

for field, possible_values in fields.iteritems():
    print field, possible_values
Run Code Online (Sandbox Code Playgroud)

有关迭代字典的更多信息,请参阅此答案,例如iteritems跨python版本使用.

编辑
Python 3以来,不再支持 iteritems().请改用items().

for field, possible_values in fields.items():
    print(field, possible_values)
Run Code Online (Sandbox Code Playgroud)

  • 至于为什么需要这样做,迭代字典会遍历键,而不是键/值对. (79认同)
  • @jeffm 这让我很困惑。我认为这是一个 PHP foreach。 (2认同)

Mei*_*tro 72

对于Python 3.x iteritems已被删除.请改用物品.

for field, possible_values in fields.items():
    print(field, possible_values)
Run Code Online (Sandbox Code Playgroud)


Mik*_*wis 37

你想使用iteritems.这会在字典上返回一个迭代器,它会为你提供一个元组(键,值)

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

你的问题是你在字段上循环,它返回字典的键.

>>> for field in fields:
...     print field
... 
first_names
last_name
Run Code Online (Sandbox Code Playgroud)


小智 8

对于列表,请使用 enumerate

for field, possible_values in enumerate(fields):
    print(field, possible_values)
Run Code Online (Sandbox Code Playgroud)

iteritems 不适用于列表对象