Python: перебирая словарь, я получаю "int object not iterable" - PullRequest
32 голосов
/ 22 апреля 2011

Вот моя функция:

def printSubnetCountList(countList):
    print type(countList)
    for k, v in countList:
        if value:
            print "Subnet %d: %d" % key, value

Вот вывод, когда функция вызывается с переданным ей словарем:

<type 'dict'>
Traceback (most recent call last):
  File "compareScans.py", line 81, in <module>
    printSubnetCountList(subnetCountOld)
  File "compareScans.py", line 70, in printSubnetCountList
    for k, v in countList:
TypeError: 'int' object is not iterable

Есть идеи?

Ответы [ 3 ]

47 голосов
/ 22 апреля 2011

Попробуйте

for k in countList:
    v= countList[k]

Или

for k, v in countList.items():

Прочтите, пожалуйста: http://docs.python.org/library/stdtypes.html#mapping-types-dict

16 голосов
/ 22 апреля 2011

Синтаксис for k, v является краткой формой записи распаковки кортежа и может быть записан как for (k, v). Это означает, что каждый элемент итеративной коллекции должен представлять собой последовательность, состоящую ровно из двух элементов. Но итерация в словарях дает только ключи, а не значения.

Решение состоит в том, чтобы использовать dict.items() или dict.iteritems() (ленивый вариант), которые возвращают последовательность кортежей ключ-значение.

1 голос
/ 22 апреля 2011

Вы не можете повторить диктовку, подобную этой. Смотрите пример:

def printSubnetCountList(countList):
    print type(countList)
    for k in countList:
        if countList[k]:
            print "Subnet %d: %d" % k, countList[k]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...