Python: Почему это не работает? (итерация по непоследовательности) - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть словарь с каждым ключом, содержащим список в качестве значения. И я пытаюсь просмотреть все элементы в списках, и, скажем, я пытаюсь распечатать все элементы по мере прохождения, я написал:

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

Это распечатывает элементы в списке для первого значения, а затем выдает ошибку, говорящую «итерация по непоследовательности». Почему это так и как мне это сделать?

Спасибо заранее.

Ответы [ 4 ]

7 голосов
/ 06 декабря 2011

Одно из значений вашего словаря не является списком!

5 голосов
/ 06 декабря 2011

Я предполагаю, что один из элементов в aDict не является последовательностью , строкой, списком, кортежем и т. Д .:

>>> 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
>>>
0 голосов
/ 06 декабря 2011

aDict[item] подразумевает, что вы хотите значения dict, а не ключи? В этом случае .itervalues() или .iteritems() должны быть более естественными, чем итерация по умолчанию (только для ключей).

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

Ошибка указывает (хотя бы на одно из) ваших значений не повторяемое.

0 голосов
/ 06 декабря 2011

Когда вы делаете это:

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
...