iter, Werte, Element Wörterbuch funktioniert nicht
Dass diese python-code
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'
Ich habe auch versucht itervalues, iterkeys... aber das funktioniert nicht
Wie code ändern?
InformationsquelleAutor cMinor | 2013-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit Python 3; verwenden
dict.items()
statt.Python 2
dict.iter*
Methoden wurden umbenannt in Python 3, wodict.items()
gibt ein dictionary-Ansicht anstelle von einer Liste standardmäßig jetzt. Wörterbuch Ansichten fungieren als iterables in der gleichen Weisedict.iteritems()
tun in Python 2.Aus der Python 3 Was ist Neu-Dokumentation:
Auch, die
.next()
Methode umbenannt wurde, um.__next__()
, aber dictionary-views sind nicht Iteratoren. Die Liniegraph.iteritems().next()
würde, die übersetzt werden müssen, stattdessen:verwendet
iter()
drehen Sie die Sicht Positionen in einem wiederholenden undnext()
um den nächsten Wert aus, die durchsuchbar.Wirst du auch umbenennen müssen in der
next
variable in derwhile
loop; mit diesem ersetzt den eingebautennext()
Funktion, die Sie hier benötigen. Verwendennext_
statt.Das nächste problem ist, dass Sie versuchen, zu verwenden
current
als Schlüssel incycles
, abercurrent
ist ein Tupel aus einer ganzen Zahl und einem Liste von ganzen zahlen, so dass der gesamte Wert nicht hashable. Ich denke Sie wollte nur die nächsten Schlüssel statt, in welchem Fallnext(iter(dict))
würde Ihnen die:Dieses erzeugt dann eine Ausgabe:
File "C:\Users\E\Desktop\c.py", line 18, in <module> current = graph.items().next() AttributeError: 'dict_items' object has no attribute 'next'
Sollte ich eine for-Schleife verwenden oder etwas stattdessen
.next()
?hat dieser code funktioniert in Python 2? Sie versuchen, zu verwenden, der ein Tupel mit einer Liste, die als Schlüssel in
current
. Das heißt, es ist nicht hashable, das ist nicht erlaubt in Python 2 oder 3.Hast du vielleicht gemeint, um
current
nur die nächsten key statt das nächste Schlüssel/Wert-paar?InformationsquelleAutor Martijn Pieters