2016-03-27 35 views
7

Wiem, że używamy enumerate do iterowania listy, ale spróbowałem jej w słowniku i nie dało błędu.enumerate() dla słownika w pytonie

KOD:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} 

for i, j in enumerate(enumm): 
    print(i, j) 

WYJŚCIE:

0 0 

1 1 

2 2 

3 4 

4 5 

5 6 

6 7 

Może ktoś wyjaśnić wyjście?

+1

Zapętlenie nad dyktando wypisuje klucze, więc czego się spodziewałeś? – salparadise

Odpowiedz

4
for k,v in dict.iteritems(): 
    print(k,v) 
+0

To nie pozwala mi na edycję 2 znaków w tym poście, ale OP oznacza to jako Python 3, więc instrukcja print musi mieć nawias wokół k, v. –

+0

@Mr. Ja, ty, naprawię. – roadrunner66

+2

Należy zauważyć, że jest to dostępne tylko dla python2. dict.iteritems() został usunięty w python3, zobacz także https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems-when-trying-to-use-networkx – gyger

1

To z pewnością musi wydawać się zagmatwane. Tak więc to się właśnie dzieje. Pierwsza wartość wyliczenia (w tym przypadku i) zwraca następną wartość indeksu rozpoczynającą się od 0, tak więc 0, 1, 2, 3, ... Zawsze zwróci te liczby niezależnie od tego, co jest w słowniku. Drugą wartością wyliczenia (w tym przypadku j) jest zwracanie wartości w słowniku/enumm (nazywamy to słownikiem w języku Python). To, co naprawdę chcesz zrobić, to odpowiedź na którą roadrunner66 odpowiedział.

9

Pierwszą kolumną wyjściową jest indeks każdego elementu w enumm, a drugi to jego klucze. Jeśli chcesz iteracyjne słownika następnie użyć .items():

for k, v in enumm.items(): 
    print(k, v) 

a wyjście powinno wyglądać następująco:

0 1 
1 2 
2 3 
4 4 
5 5 
6 6 
7 7 
0
  1. iteracji ponad dict Python oznacza iteracyjne nad swoje klucze dokładnie tak samo jak z dict.keys()
  2. Kolejność klawiszy jest określona przez kod implementacji i nie można się spodziewać określonej kolejności:

    Klucze i wartości są iterowane w dowolnej kolejności, która jest nie-losowa, różni się w zależności od implementacji Pythona i zależy od historii wstawień i usunięć słownika . Jeśli klawisze, wartości i widoki pozycji zostaną powtórzone bez żadnych zmian w słowniku Słownika , kolejność pozycji będzie bezpośrednio odpowiadać.

Dlatego widzisz indeksach 0 do 7 w pierwszej kolumnie. Są one produkowane przez enumerate i są zawsze w prawidłowej kolejności. Dalej widzisz klucze dyktatora od 0 do 7 w drugiej kolumnie. Nie są sortowane.