Как поменять порядок ключей в python dict? - PullRequest
20 голосов
/ 28 марта 2011

Это мой код:

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

for i in a:
    print i

показывает:

0
1
3
4

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

4
3
1
0

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

Ответы [ 7 ]

33 голосов
/ 28 марта 2011

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

>>> 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]
14 голосов
/ 28 марта 2011

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

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

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

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

a = {3:'3', 0:'0', 1:'1'}
10 голосов
/ 28 марта 2011

Попробуйте:

for i in sorted(a.keys(), reverse=True):
    print i
4 голосов
/ 28 марта 2011

Python dict не заказан в 2.x.Но в 3.1 .

есть упорядоченная реализация dict.
4 голосов
/ 28 марта 2011

Словари 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()

1 голос
/ 28 марта 2011
for i in reversed(sorted(a.keys())):
    print i
0 голосов
/ 13 сентября 2018

просто попробуй,

ВХОД: a = {0: «000000», 1: «11111», 3: «333333», 4: «444444»}

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

ВЫХОД: [4, 3, 1, 0]

...