Сортировка словаря Python по приоритету - PullRequest
4 голосов
/ 16 мая 2019

У меня есть словарь Python, состоящий из пар (имена, значения), как это

pyDictionary = {"Bob":12,"Mellissa":12,"roger":13}

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

Как я могу добиться этого в python3.7?

Ответы [ 2 ]

6 голосов
/ 16 мая 2019

Вы можете использовать sorted с key и построить OrderedDict из результата для поддержания порядка.

(последний шаг необходим только для python 3.6 <, в Python 3.7 диктанты располагаются по времени вставки ключа)


from collections import OrderedDict
d = {"Mellissa":12, "roger":13, "Bob":12}

OrderedDict(sorted(d.items(), key=lambda x: (x[1], x[0])))
# dict(sorted(d.items(), key=lambda x: (x[1], x[0]))) # for Python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]

Или вы также можете использовать operator.itemgetter для непосредственного извлечения value и key из каждого кортежа соответственно:

OrderedDict(sorted(d.items(), key=itemgetter(1,0)))
# dict(sorted(d.items(), key=itemgetter(1,0))) # python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]
1 голос
/ 16 мая 2019

Вы можете сортировать элементы dict с помощью ключевой функции, которая меняет порядок кортежей ключ-значение:

dict(sorted(pyDictionary.items(), key=lambda t: t[::-1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...