2015-08-20 5 views
5

Comment inverser l'ordre des paires clé-valeur d'un dictionnaire, en Python? Par exemple, j'ai ce dictionnaire:Inverser l'ordre des paires clé-valeur dans un dictionnaire (Python)

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

Je veux inverser afin qu'il retourne:

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

Y at-il une fonction que je ne l'ai pas entendu parler qui peut le faire? Certaines lignes de code sont bien aussi.

+2

Les dictionnaires Python ne sont pas commandés. – Delgan

Répondre

7

Le dictionnaire n'a aucun sens de l'ordre, donc vos paires clé/valeur ne sont pas classées dans aucun format.

Si vous voulez préserver l'ordre des clés, vous devez utiliser collections.OrderedDict dès le départ, au lieu d'utiliser le dictionnaire normal Exemple -

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

OrderedDict préserverait l'ordre dans lequel les clés ont été entrées dans le dictionnaire. Dans le cas ci-dessus, ce serait l'ordre dans lequel les clés existaient dans la liste - [('a',1),('b',2),('c',3)] -

Ensuite, vous pouvez obtenir l'ordre inverse des clés à l'aide reversed(d), Exemple -

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

Oui correct, ce n'est pas le point, c'est que trié le trierait, OP ne veut pas 'trier ', OP veut des clés dans l'ordre inverse. –

+0

Oui :). ma solution vient de résoudre pour cet exemple (chance). Merci pour l'info. :) – itzMEonTV

0

Un dictionnaire utilise hashmap pour stocker la clé et les valeurs correspondantes.

Regardez: Is a Python dictionary an example of a hash table?

Tout ce qui touche à hachage n'a pas d'ordre.

Vous pouvez le faire avec ceci:

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() retourne une liste de tuples: [('a', 1), ('c', 3), ('b', 2), ('d', 4)] et k,v obtient les valeurs tuples pour itérer en boucle. sorted() renvoie une liste triée, alors que vous ne pouvez pas use d.items().sort() qui ne retourne pas, mais qui essaie à la place d'écraser le d.items().