2013-07-22 43 views
21

Chcę iterować przez słownik w python według numeru indeksu.Słownik iteracji Pythona według indeksu

Przykład:

dict = {'apple':'red','mango':'green','orange':'orange'} 

Chcę iterację słownika od początku do końca, tak, że można uzyskać dostęp do słownika elementy ich indeksami. Na przykład pierwsza pozycja to jabłko, a druga pozycja to mango, a wartość będzie zielona.

coś takiego:

for i in range(0,len(dict)): 
    dict.i 
+8

słowniki nie mają pierwszy i ostatni. są nieuporządkowanym zbiorem par klucz-wartość –

Odpowiedz

4

Nie mogę myśleć o jakiejkolwiek przyczyny dlaczego chcesz to zrobić. Jeśli potrzebujesz tylko do iteracji po słowniku, możesz po prostu zrobić.

for key, elem in testDict.items(): 
    print key, elem 

LUB

for i in testDict: 
    print i, testDict[i] 
+37

To nie odpowiada na pytanie. Nie ma znaczenia, czy nie możesz zrozumieć, dlaczego ktoś chciałby to zrobić. Prawidłowa odpowiedź jest podana przez @alecxe: http://stackoverflow.com/a/17793421/835428 –

+3

Dlaczego jest to akceptowane przez OP jako odpowiedź? ponieważ nie jest to odpowiedź na faktyczne pytanie zadawane przez PO. dziwne. –

+0

@ RikSmith-Unna Ma znaczenie, jeśli nie możesz tego zrozumieć.Ponieważ znajomość szerszego obrazu może ujawnić lepsze/prostsze rozwiązanie. A jeśli tak, musisz zapytać o to OP (większy obrazek). –

0

Wykonaj:

for i in dict.keys(): 
    dict[i] 
+4

lub nawet 'dla i in my_dict' –

59

Można iteracyjne nad klucze i uzyskać wartości za pomocą przycisków:

for key in dict.iterkeys(): 
    print key, dict[key] 

Można iteracyjne nad klucze i odpowiadające im wartości:

for key, value in dict.iteritems(): 
    print key, value 

Można użyć enumerate jeśli chcesz indeksy (należy pamiętać, że nie posiadają słowniki zamówienia):

>>> for index, key in enumerate(dict): 
...  print index, key 
... 
0 orange 
1 mango 
2 apple 
>>> 
+5

Należy zauważyć, że słowniki są nieuporządkowane, a każda zmiana może spowodować różne indeksy dla wszystkich pozycji. –

+0

Tak, dziękuję! – alecxe

+2

O ile oczywiście użyjesz OrderedDict: https://docs.python.org/2/library/collections.html#collections.OrderedDict – Datageek

1

Ponieważ chcesz iteracyjne w porządku, można użyć sorted:

for k, v in sorted(dict.items()): 
    print k,v 
+0

dla jakiejś definicji zamawianego ... –

+0

Mieć nadmiarowy 'iter (...) "tam ... –

2

I chciał wiedzieć (idx, klucz, wartość) dla Pythona dziś OrderedDict (mapowanie kodów SKU do ilości w kolejności, w jakiej powinny pojawić się na paragonie). Odpowiedzi tutaj były wszystkie bummers.

W pytonie 3 przynajmniej ta metoda działa i ma sens.

In [1]: from collections import OrderedDict 
    ...: od = OrderedDict() 
    ...: od['a']='spam' 
    ...: od['b']='ham' 
    ...: od['c']='eggs' 
    ...: 
    ...: for i,(k,v) in enumerate(od.items()): 
    ...: print('%d,%s,%s'%(i,k,v)) 
    ...: 
0,a,spam 
1,b,ham 
2,c,eggs 
3

Istnieje kilka bardzo dobrych odpowiedzi tutaj. Chciałbym dodać następujące również tutaj:

some_dict = { 
    "foo": "bar", 
    "lorem": "ipsum" 
} 

for index, (key, value) in enumerate(some_dict.items()): 
    print(index, key, value) 

skutkuje

0 foo bar 
1 lorem ipsum 

wydaje się działać z Pythonem 2.7 i 3.5

Powiązane problemy