Как изменить порядок ключей в python dict?

Это мой код :

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

for i in a:
    print i

Это показывает:

0
1
3
4

но я хочу, чтобы это показать:

4
3
1
0

Итак, что я могу сделать?

7 ответов


ключи порядка повторяются произвольно. Это было просто совпадение,что они были в порядке.

>>> 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]

словари неупорядочены, поэтому вы не можете их отменить. Порядок текущего вывода является произвольным.

тем не менее, вы можете заказать ключи, конечно:

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

но это дает обратный порядок отсортированный ключи, не обязательно в обратном порядке ключи, как они были добавлены. Т. е. он не даст тебе 1 0 3 Если ваш словарь был:

a = {3:'3', 0:'0', 1:'1'}

попробуй:

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

Python dict не упорядочен в 2.X. Но есть упорядоченная реализация dict в 3.1.


словари Python не имеют никакого "порядка", связанного с ними. Это просто "совпадение", что дикт печатает тот же порядок. Нет никаких гарантий, что элементы в словаре будут выходить в любом порядке.

Если вы хотите иметь дело с заказом, вам нужно будет преобразовать словарь в список.

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

Теперь вы можете отсортировать список, как обычно, например, a.sort() и переверните его, например,a.reverse()


for i in reversed(sorted(a.keys())):
    print i

просто попробовать,

вход: a = {0:'000000',1:'11111',3:'333333',4:'444444'}

[x для x в сортировке (a.keys (), reverse=True)]

выход: [4, 3, 1, 0]