iter, values, item dans le dictionnaire ne fonctionne pas
Avoir ce code 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'
J'ai aussi essayé itervalues, iterkeys... mais qui ne fonctionne pas
Comment modifier le code?
source d'informationauteur cMinor
Vous devez vous connecter pour publier un commentaire.
Vous êtes à l'aide de Python 3; utilisez
dict.items()
à la place.Le Python 2
dict.iter*
méthodes ont été renommés en Python 3, oùdict.items()
retourne un dictionnaire de vue au lieu de une liste par défaut maintenant. Dictionnaire des vues agir comme iterables de la même façondict.iteritems()
faire en Python 2.De la Python 3 nouveautés de la documentation:
Aussi, le
.next()
méthode a été renommé.__next__()
mais le dictionnaire de vues ne sont pas des itérateurs. La lignegraph.iteritems().next()
devrait être traduit au lieu de cela, à:qui utilise
iter()
à son tour les éléments de la vue dans un objet iterable etnext()
pour obtenir la valeur suivante à partir de ce itératif.Vous aurez également pour renommer le
next
variable dans lewhile
boucle; l'aide qui remplace le haut-next()
la fonction dont vous avez besoin ici. Utilisationnext_
à la place.Le problème suivant est que vous essayez d'utiliser
current
comme un élément clé danscycles
maiscurrent
est un n-uplet d'un entier et d'une liste d'entiers, l'ensemble de la valeur pas hashable. Je pense vous vouliez obtenir juste la prochaine clé au lieu de cela, auquel casnext(iter(dict))
vous donnerait:Ce produit alors une partie de la sortie: