iter, values, item в словаре не работает

Наличие этого кода на Python

edges = [(0, [3]), (1, [0]), (2, [1, 6]), (3, [2]), (4, [2]), (5, [4]), (6, [5, 8]), (7, [9]), (8, [7]), (9, [6])] graph = {0: [3], 1: [0], 2: [1, 6], 3: [2], 4: [2], 5: [4], 6: [5, 8], 7: [9], 8: [7], 9: [6]} cycles = {} while graph: current = graph.iteritems().next() cycle = [current] cycles[current] = cycle while current in graph: next = graph[current][0] del graph[current][0] if len(graph[current]) == 0: del graph[current] current = next cycle.append(next) def traverse(tree, root): out = [] for r in tree[root]: if r != root and r in tree: out += traverse(tree, r) else: out.append(r) return out print ('->'.join([str(i) for i in traverse(cycles, 0)])) Traceback (most recent call last): File "C:\Users\E\Desktop\c.py", line 20, in <module> current = graph.iteritems().next() AttributeError: 'dict' object has no attribute 'iteritems' 

Я также попробовал itervalues, iterkeys … но это не работает Как изменить код?

One Solution collect form web for “iter, values, item в словаре не работает”

Вы используете Python 3; dict.items() этого используйте dict.items() .

Методы Python 2 dict.iter* были переименованы в Python 3, где dict.items() возвращает список словарей вместо списка по умолчанию. Словарные представления действуют как итерации таким же образом, как и dict.iteritems() в Python 2.

Из документации Python 3 What's New :

  • dict методы dict.keys() , dict.items() и dict.values() возвращают «представления» вместо списков. Например, это больше не работает: k = d.keys(); k.sort() k = d.keys(); k.sort() . Вместо этого используйте k = sorted(d) (это также работает в Python 2.5 и так же эффективно).
  • Кроме того, dict.iterkeys() , dict.iteritems() и dict.itervalues() больше не поддерживаются.

Кроме того, метод .next() был переименован в .__next__() , но словарные представления не являются итераторами. Строка graph.iteritems().next() должна быть переведена вместо: to:

 current = next(iter(graph.items())) 

который использует iter() чтобы превратить представление элементов в итерируемый и next() чтобы получить следующее значение из этого итерабельного.

Вам также придется переименовать next переменную в цикле while; используя эту замену встроенной функции next() которая вам нужна здесь. next_ этого используйте next_ .

Следующая проблема заключается в том, что вы пытаетесь использовать current в качестве ключа в cycles , но current – это кортеж целого числа и список целых чисел, что делает целое значение не hashable. Я думаю, вы хотели получить только следующий ключ, а в next(iter(dict)) случае next(iter(dict)) даст вам следующее:

 while graph: current = next(iter(graph)) cycle = [current] cycles[current] = cycle while current in graph: next_ = graph[current][0] del graph[current][0] if len(graph[current]) == 0: del graph[current] current = next_ cycle.append(next_) 

Затем это производит некоторый вывод:

 >>> cycles {0: [0, 3, 2, 1, 0], 2: [2, 6, 5, 4, 2], 6: [6, 8, 7, 9, 6]} 
  • Каков правильный способ лечения Python argparse.Namespace () в качестве словаря?
  • вставка в словарь python
  • Python: Collections.Counter vs defaultdict (int)
  • Python: как я могу разобрать {apple: "1", orange: "2"} в словаре?
  • Есть ли реализация «multimap» в Python?
  • Подсчет значений в словаре
  • Сглаживать вложенные словари Python, сжимать ключи
  • TypeError: строковые индексы должны быть целыми, а не str // работать с dict
  •  
    Interesting Posts for Van-Lav

    Обнаруживать, если метод был украшен, прежде чем вызывать его

    Py2exe жалуется на отсутствие DLL, когда у меня есть?

    преобразование файла с разделителями пробелов в CSV

    Установить пипс в докере

    Ошибка django datetime.datetime

    Django: как установить уровень журнала для INFO или DEBUG

    «Требуется целое число» при открытии () файла в виде utf-8?

    Фильтрация объектов в представлении в Django – Oscar?

    Выполнение одного теста из unittest.TestCase через командную строку

    Как выбрать из нескольких таблиц в одном запросе с помощью Django?

    Запись и воспроизведение событий в формате Qt GUI

    не удалось загрузить приложение 0 (mountpoint = '') – Приложение для фляги с uwsgi

    Конкатенация строк Python – UnicodeDecodeError: кодек ascii не может декодировать байт

    Сделайте URL-адрес Flask'а для использования схемы «https» в балансировщике нагрузки AWS, не испортив SSLify

    Изменение поведения модели Django с помощью __getattr__

    Python - лучший язык программирования в мире.