Подтвердить что ты не робот

Python: Итерация через словарь дает мне "int object not iterable"

Здесь моя функция:

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

Любые идеи?

4b9b3361

Ответ 2

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

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

Ответ 3

Вы не можете повторять такой дикт. Пример:

def printSubnetCountList(countList):
    print type(countList)
    for k in countList:
        if countList[k]:
            print "Subnet %d: %d" % k, countList[k]