Обратный порядок слов в Python - PullRequest
3 голосов
/ 30 апреля 2019

Предположим, у меня есть словарь:

d = {3: 'three', 2: 'two', 1: 'one'}

Я хочу изменить порядок словаря таким образом, чтобы словарь был:

d = {1: 'one', 2: 'two', 3: 'three'}

Я думал что-то вроде reverse() функция для списков, но это не сработало.Заранее спасибо за ваши ответы!

Ответы [ 2 ]

7 голосов
/ 30 апреля 2019

Начиная с CPython 3.6 (как деталь реализации) и Python 3.7 (как языковая гарантия), простые dict s имеют порядок.

На 3.7 и ниже они не дошли доподдержка __reversed__ для dict и dict представлений, поэтому вам необходимо преобразовать элементы в list (или tuple, это не имеет значения) и выполнить итерацию в обратном порядке:

d = {3: 'three', 2: 'two', 1: 'one'}
d = dict(reversed(list(d.items())))

Когда выйдет 3.8, представление элементов будет изначально итерируемым в обратном порядке, так что вы можете просто сделать:

d = dict(reversed(d.items()))

без необходимости делать временные list вообще.

Pre-3,6, вам потребуется collections.OrderedDict (как для входа, так и для выхода), чтобы достичь желаемого результата.

2 голосов
/ 30 апреля 2019

Стандартные словари Python (до Python 3.6) не имеют порядка и не гарантируют порядок. Это именно то, для чего создано OrderedDict.

Если ваш словарь был OrderedDict, вы можете изменить его на:

import collections

mydict = collections.OrderedDict()
mydict['1'] = 'one'
mydict['2'] = 'two'
mydict['3'] = 'three'

collections.OrderedDict(reversed(list(mydict.items())))
...