2015-08-20 3 views
5

Как отменить порядок пар ключ-значение словаря в Python? Например, у меня есть этот словарь:Реверсирование порядка пар ключ-значение в словаре (Python)

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

Я хочу обратить его так, что он возвращает:

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

Есть ли функция, которую я не слышал о том, что может сделать это? Некоторые строки кода тоже прекрасны.

+2

Python словари не упорядочены. – Delgan

ответ

7

Словарь не имеет никакого смысла в заказе, поэтому ваши пары ключ/значение не упорядочены в любом формате.

Если вы хотите сохранить порядок клавиш, вы должны использовать collections.OrderedDict с самого начала, а не с помощью обычного словаря, пример -

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

OrderedDict бы сохранить порядок, в котором ключи были введены в словарь. В описанном выше случае, было бы порядок, в котором существовали ключи в списке - [('a',1),('b',2),('c',3)] -

Тогда вы можете получить обратный порядок ключей с использованием reversed(d), пример -

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

Да, правильно, это не так, его сортировка будет сортировать, OP не хочет «сортировать», OP хочет ключи в обратном порядке. –

+0

Да :). мое решение просто решает этот пример (удача). Спасибо за информацию. :) – itzMEonTV

0

Словарь использует HashMap для сохранения ключа и соответствующих значений.

Посмотрите: Is a Python dictionary an example of a hash table?

что связано с хэш не имеет никакого порядка.

Вы можете сделать это с этим:

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() возвращает список кортежей: [('a', 1), ('c', 3), ('b', 2), ('d', 4)] и k,v получают значения в кортежах для итерации в цикле. sorted() возвращает отсортированный список, тогда как вы не можете use d.items().sort(), который не возвращается, но вместо этого пытается перезаписать d.items().

Смежные вопросы