2015-08-20 12 views
5

Jak odwrócić kolejność par klucz-wartość słownika w języku Python? Na przykład, mam tego słownika:Odwracanie kolejności par klucz-wartość w słowniku (Python)

{"a":1, "b":2, "c":3} 

Chcę odwrócić go tak, że zwraca:

{"c":3, "b":2, "a":1} 

Czy istnieje funkcja, która nie słyszałem o tym może to zrobić? Niektóre wiersze kodu też są w porządku.

+2

Słowniki języka Python nie są uporządkowane. – Delgan

Odpowiedz

7

Słownik nie ma żadnego sensu zamówienia, więc pary klucz/wartość nie są zamawiane w żadnym formacie.

Jeśli chcesz zachować kolejność kluczy, należy użyć collections.OrderedDict od początku, zamiast używać zwykłego słownika, przykład -

>>> from collections import OrderedDict 
>>> d = OrderedDict([('a',1),('b',2),('c',3)]) 
>>> d 
OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 

OrderedDict by zachować kolejność, w której klawisze zostały wprowadzone do słownik. W powyższym przypadku, byłoby to kolejność, w jakiej istniał klucze na liście - [('a',1),('b',2),('c',3)] -

Następnie można uzyskać odwróconą kolejność przycisków za pomocą reversed(d), przykład -

>>> dreversed = OrderedDict() 
>>> for k in reversed(d): 
...  dreversed[k] = d[k] 
... 
>>> dreversed 
OrderedDict([('c', 3), ('b', 2), ('a', 1)]) 
+0

Tak, to prawda, nie jest to punkt, którego posortowane sortowanie go, OP nie chce "sortować", OP chce kluczy w odwrotnej kolejności. –

+0

Tak :). moje rozwiązanie wystarczy rozwiązać dla tego przykładu (szczęście). Dzięki za informację. :) – itzMEonTV

0

Słownik wykorzystuje HashMap do przechowywania klucza i odpowiednich wartości.

Spójrz: Is a Python dictionary an example of a hash table?

wszystko związane z hash ma zamówienia.

Można to zrobić z tym:

d = {} 
d['a']=1 
d['b']=2 
d['c']=3 
d['d']=4 
print d 
for k,v in sorted(d.items(),reverse = True): 
    print k,v 

d.items() zwraca listę krotek: [('a', 1), ('c', 3), ('b', 2), ('d', 4)] i k,v uzyskuje wartości w krotek do iteracji w pętli. sorted() zwraca posortowaną listę, podczas gdy nie można use d.items().sort(), która nie zwraca, ale zamiast tego próbuje nadpisać d.items().