Изменение порядка пар ключ-значение в словаре (Python)

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

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

Я хочу изменить это так, чтобы он возвращал:

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

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

3 ответа

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

Если вы хотите сохранить порядок ключей, вы должны использовать 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)] - 'a' -> 'b' -> 'c'

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

>>> dreversed = OrderedDict()
>>> for k in reversed(d):
...     dreversed[k] = d[k]
...
>>> dreversed
OrderedDict([('c', 3), ('b', 2), ('a', 1)])
#The dictionary to be reversed
dict = {"key1":"value1","key2":"value2","key3":"value3"}

#Append the keys of the dictionary in a list
list_keys = []
for k in dict.keys():
    list_keys.append(k)

rev_dict = {}
#Traverse through the reversed list of keys and add them to a new dictionary
for i in reversed(list_keys):
    rev_dict[i] = dict[I]
print(rev_dict)

#OUTPUT: {'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}

Это будет работать По словам Венкатешвары, это не сработало для меня "как есть".

def reverse(self):
    a = self.yourdict.items()
    b = list(a) # cast to list from dict_view
    b.reverse() # actual reverse
    self.yourdict = dict(b) # push back reversed values

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

Посмотрите: Является ли словарь Python примером хеш-таблицы?

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

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

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(),

d={"a":1, "b":2, "c":3}
x={}
for i in sorted(d.keys(),reverse=True):
    x[i]=d[i]
print(x)
Другие вопросы по тегам