Ich weiß, dass wir enumerate
zum Iterieren einer Liste verwenden, aber ich habe es in einem Wörterbuch versucht und es gab keinen Fehler.
CODE:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
print(i, j)
AUSGABE:
0 0
1 1
2 2
3 4
4 5
5 6
6 7
Kann jemand die Ausgabe erklären?
python
python-3.x
dictionary
enumerate
Aditya Krishn
quelle
quelle
for i, j in enumerate(enumm)
wirdi
bei jeder Iteration inkrementiert undj
fängt das übliche Element aus demenumerate
Funktionsargument ab, das in diesem Fall ein Wörterbuch ist. Das Iterieren über Diktate ist im Wesentlichen das Iterieren über seine Schlüssel.Antworten:
Zusätzlich zu den bereits bereitgestellten Antworten gibt es in Python ein sehr schönes Muster, mit dem Sie sowohl Schlüssel als auch Werte eines Wörterbuchs auflisten können.
Im Normalfall zählen Sie die Schlüssel des Wörterbuchs auf:
example_dict = {1:'a', 2:'b', 3:'c', 4:'d'} for i, k in enumerate(example_dict): print(i, k)
Welche Ausgänge:
0 1 1 2 2 3 3 4
Wenn Sie jedoch sowohl Schlüssel als auch Werte aufzählen möchten, ist dies der folgende Weg:
for i, (k, v) in enumerate(example_dict.items()): print(i, k, v)
Welche Ausgänge:
0 1 a 1 2 b 2 3 c 3 4 d
quelle
dictionary.items()
(ohne Aufzählung) ein Ansichtsobjekt mit Schlüssel-Wert-Paaren als Liste von Tupeln abrufen.Die erste Ausgabespalte ist der Index jedes Elements in
enumm
und die zweite ist der Schlüssel. Wenn Sie Ihr Wörterbuch iterieren möchten, verwenden Sie .items ():for k, v in enumm.items(): print(k, v)
Und die Ausgabe sollte folgendermaßen aussehen:
0 1 1 2 2 3 4 4 5 5 6 6 7 7
quelle
Ich dachte nur, ich würde hinzufügen, wenn Sie den Index, den Schlüssel und die Werte eines Wörterbuchs aufzählen möchten, sollte Ihre for-Schleife folgendermaßen aussehen:
for index, (key, value) in enumerate(your_dict.items()): print(index, key, value)
quelle
idx, (k, v) in enumerate(d.items()):
dict1={'a':1, 'b':'banana'}
So listen Sie das Wörterbuch in Python 2.x auf:
for k,v in dict1.iteritems(): print k,v
Verwenden Sie in Python 3.x:
for k,v in dict1.items(): print(k,v) # a 1 # b banana
Wie andere bereits angedeutet haben, können Sie, wenn Sie einen laufenden Index wünschen, auch Folgendes haben:
for i in enumerate(dict1.items()): print(i) # (0, ('a', 1)) # (1, ('b', 'banana'))
Dies macht jedoch den Zweck eines Wörterbuchs (Karte, assoziatives Array) zunichte , das eine effiziente Datenstruktur für die Suche im Telefonbuchstil darstellt. Die Reihenfolge der Wörterbücher kann mit der Implementierung verbunden sein und sollte nicht als verlässlich angesehen werden. Wenn Sie die Bestellung benötigen, verwenden Sie stattdessen OrderedDict .
quelle
Da Sie
enumerate
daher verwenden, ist Ihri
tatsächlich der Index des Schlüssels und nicht der Schlüssel selbst.Sie gelangen also
3
in die erste Spalte der Zeile3 4
, obwohl kein Schlüssel vorhanden ist3
.enumerate
iteriert durch eine Datenstruktur (sei es eine Liste oder ein Wörterbuch) und gibt gleichzeitig die aktuelle Iterationsnummer an.Daher sind die Spalten hier die Iterationsnummer, gefolgt vom Schlüssel im Wörterbuch
enum
Andere Lösungen haben bereits gezeigt, wie man über Schlüssel- und Wertepaare iteriert, damit ich das in meinem nicht wiederhole.
quelle
enumerate()
Wenn Sie an einer Liste arbeiten, erhalten Sie tatsächlich den Index und den Wert der Elemente in der Liste. Zum Beispiel:l = [1, 2, 3, 4, 5, 6, 7, 8, 9] for i, j in enumerate(list): print(i, j)
gibt
0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
Dabei bezeichnet die erste Spalte den Index des Elements und die zweite Spalte die Elemente selbst.
In einem Wörterbuch
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, j in enumerate(enumm): print(i, j)
es gibt die Ausgabe
0 0 1 1 2 2 3 4 4 5 5 6 6 7
Dabei gibt die erste Spalte den Index der
key:value
Paare und die zweite Spalte den Index deskeys
Wörterbuchs anenumm
.Wenn Sie also möchten, dass die erste Spalte die
keys
zweite und die zweite Spalte istvalues
, probieren Sie besserdict.iteritems()
(Python 2) oderdict.items()
(Python 3) aus.for i, j in enumm.items(): print(i, j)
Ausgabe
0 1 1 2 2 3 4 4 5 5 6 6 7 7
Voila
quelle
Das muss sicher verwirrend erscheinen. Das ist also was los ist. Der erste Wert von enumerate (in diesem Fall i) gibt den nächsten Indexwert zurück, der bei 0 beginnt, also 0, 1, 2, 3, ... Diese Zahlen werden immer zurückgegeben, unabhängig davon, was im Wörterbuch enthalten ist. Der zweite Wert von enumerate (in diesem Fall j) gibt die Werte in Ihrem Wörterbuch / enumm zurück (wir nennen es ein Wörterbuch in Python). Was Sie wirklich tun möchten, ist, worauf roadrunner66 reagiert hat.
quelle
dict.keys()
Deshalb sehen Sie in der ersten Spalte die Indizes 0 bis 7. Sie werden von hergestellt
enumerate
und sind immer in der richtigen Reihenfolge. Weiter sehen Sie die Tasten 0 bis 7 des Diktats in der zweiten Spalte. Sie sind nicht sortiert.quelle
Python3:
Eine Lösung:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, k in enumerate(enumm): print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))
Output: 0) enumm.key=0, enumm.value=1 1) enumm.key=1, enumm.value=2 2) enumm.key=2, enumm.value=3 3) enumm.key=4, enumm.value=4 4) enumm.key=5, enumm.value=5 5) enumm.key=6, enumm.value=6 6) enumm.key=7, enumm.value=7
Ein weiteres Beispiel:
d = {1 : {'a': 1, 'b' : 2, 'c' : 3}, 2 : {'a': 10, 'b' : 20, 'c' : 30} } for i, k in enumerate(d): print("{}) key={}, value={}".format(i, k, d[k])
Output: 0) key=1, value={'a': 1, 'b': 2, 'c': 3} 1) key=2, value={'a': 10, 'b': 20, 'c': 30}
quelle
d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'} print("List of enumerated d= ", list(enumerate(d.items())))
Ausgabe:
List of enumerated d= [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]
quelle
Es kann nützlich sein, den Index in den Schlüssel aufzunehmen:
d = {'a': 1, 'b': 2} d = {(i, k): v for i, (k, v) in enumerate(d.items())}
Ausgabe:
{(0, 'a'): True, (1, 'b'): False}
quelle