web-dev-qa-db-fra.com

Comment inverser l'ordre des clés dans python dict?

Voici mon code:

a = {0:'000000',1:'11111',3:'333333',4:'444444'}

for i in a:
    print i

ça montre:

0
1
3
4

mais je veux qu'il montre:

4
3
1
0

alors qu'est-ce que je peux faire?

22
zjm1126

Les clés de commande sont itérées dans est arbitraire. Ce n'était qu'une coïncidence qu'ils étaient classés par ordre.

>>> a = {0:'000000',1:'11111',3:'333333',4:'444444'}
>>> a.keys()
[0, 1, 3, 4]
>>> sorted(a.keys())
[0, 1, 3, 4]
>>> reversed(sorted(a.keys()))
<listreverseiterator object at 0x02B0DB70>
>>> list(reversed(sorted(a.keys())))
[4, 3, 1, 0]

Les dictionnaires ne sont pas classés, vous ne pouvez donc pas les inverser. L'ordre de la sortie actuelle est arbitraire.

Cela dit, vous pouvez bien sûr commander les clés:

for i in sorted(a.keys(), reverse=True):
    print a[i];

mais cela vous donne l'ordre inverse des clés triées, pas nécessairement l'ordre inverse des clés comment elles ont été ajoutées. C'est à dire. cela ne vous donnera pas 1 0 3 si votre dictionnaire était:

a = {3:'3', 0:'0', 1:'1'}
15
Felix Kling

Essayer:

for i in sorted(a.keys(), reverse=True):
    print i
11
Neil G

Python dict n'est pas commandé en 2.x. Mais il y a une implémentation de dict ordonnée dans .1 .

5
Rumple Stiltskin

Les dictionnaires Python ne sont associés à aucun "ordre". C'est simplement une "coïncidence" que le dicton imprime le même ordre. Il n'y a aucune garantie que les éléments d'un dictionnaire sortent dans n'importe quel ordre.

Si vous souhaitez gérer la commande, vous devrez convertir le dictionnaire en liste.

a = list(a) # keys in list
a = a.keys() # keys in list
a = a.values() # values in list
a = a.items() # tuples of (key,value) in list

Vous pouvez maintenant trier la liste normalement, par exemple, a.sort() et l'inverser également, par exemple, a.reverse()

4
Chris W.

Depuis Python 3.7 dict ordre de conservation, ce qui signifie que vous pouvez le faire maintenant:

my_dict = {'a': 1, 'c': 3, 'b': 2}

for k in reversed(list(my_dict.keys())):
    print(k)

Production:

b
c
a

Depuis Python 3.8 le reversed() intégré accepte également les dictés, vous pouvez donc utiliser:

for k in reversed(my_dict):
    print(k)
3
Rotareti
for i in reversed(sorted(a.keys())):
    print i
1
Simon

essayez,

INPUT: a = {0: '000000', 1: '11111', 3: '333333', 4: '444444'}

[x pour x dans trié (a.keys (), reverse = True)]

SORTIE: [4, 3, 1, 0]

0
Jai K

Dans Python 3.6, que j'utilise, j'ai inversé l'ordre des clés avec leurs valeurs respectives à l'aide de la mise à jour de la fonction.

original_dict={'A':0,'C':2,'B':1}
new_dict={}
for k,v in original_dict.items():
    dict_element={k:v}
    dict_element.update(new_dict)
    new_dict=dict_element

print(new_dict)

Il devrait imprimer:

{'B':1,'C':2,'A':0}

Mon 2 ¢.

0
Fabio Mendes Soares