【问题标题】:Python: Why doesn't this work? (iteration over non-sequence)Python:为什么这不起作用? (对非序列的迭代)
【发布时间】:2023-03-23 17:50:02
【问题描述】:

我有一个字典,每个键都包含一个列表作为值。我正在尝试查看列表中的所有项目,假设我正在尝试打印所有项目,我写道:

for item in aDict: 
    for item2 in aDict[item]: 
        print item2

这会打印出列表中第一个值的项目,然后它给我一个错误,说“迭代非序列”。为什么会这样?我应该怎么做?

提前致谢。

【问题讨论】:

  • 旁注(不能解决您的问题):改用iteritems()for (i, lst) in aDict.iteritems(): for item2 in lst: ...
  • 我怀疑@StevenRumbalski 和@Ben 对此一针见血。您可以尝试在两个 for-loops 之间插入一个打印语句,以找出其中的确切内容。

标签: python dictionary iteration sequence


【解决方案1】:

您的字典值之一不是列表!

【讨论】:

  • 哦,我没有看到这个具有整数值的键。我应该更加小心... :( 无论如何谢谢!
【解决方案2】:

我假设aDict 中的一项不是sequence、字符串、列表、元组等:

>>> aDict = { 'a' : [1, 2, 3,], 'b' : [4, 5, 6,], 'c' : [7, 8, 9,] }
>>> for item in aDict:
...     for item2 in aDict[item]:
...         print item2
...
1
2
3
7
8
9
4
5
6
>>>

【讨论】:

  • 哦,我没有看到这个具有整数值的键。我应该更加小心... :( 无论如何谢谢!
【解决方案3】:

当你这样做时:

for item in aDict: 
    for item2 in aDict[item]: 
        print item2

您的说法,对于字典中的每个item,循环遍历字典中的item 索引,这没有任何意义。

您真正想要做的是为每个item 循环遍历该特定项目,例如:

for item in aDict: 
    for item2 in item: 
        print item2

或使用更好的术语:

for dictIndex in aDict: 
        for item in dictIndex: 
            print item

【讨论】:

  • 不,不是这样。 for item in aDict 迭代 keys。所以他确实需要做aDict[item]。 (或者只是做for item in aDict.values():
【解决方案4】:

aDict[item] 暗示你想要字典的值,而不是键?在这种情况下,.itervalues().iteritems() 应该比默认迭代更自然(仅限于键)。

for key, value in aDict.iteritems():
    for subvalue in value:
        pass

错误指向(至少一个)您的值不可迭代。

【讨论】:

  • 如果你不打算对键做任何事情,最好使用 itervalues。
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2021-10-03
  • 2017-04-09
  • 2017-10-15
  • 1970-01-01
  • 2015-05-21
  • 2011-10-13
  • 2021-08-03
相关资源
最近更新 更多