Сортировать словарь по ключу: приоритет одного ключа и алфавитный - PullRequest
1 голос
/ 04 апреля 2019

У меня есть словарь Python d:

d = { 
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
}

Я хочу отсортировать его так, чтобы:

  1. Ключ со значением x был первым.
  2. Все остальное отсортировано по алфавиту.

Так что, если x = 'c', тогда я хочу, чтобы вывод был:

>>> print(new_d)
>>> { 'c': 3, 'a': 1, 'b': 2, 'd': 4}

Есть ли прямой / простой / Pythonic способ сделать это?И да, я видел и понимаю множество ответов на вопросы Как отсортировать словарь по значению? и Как можно отсортировать словарь по ключу?

1 Ответ

6 голосов
/ 04 апреля 2019

Словари до Python 3.7 не сортируются, однако вы можете отсортировать список кортежей из dict.items, и если вы используете Python 3.7, создайте dict из результата. Ключ сортировки lambda возвращает список с двумя элементами. Первый элемент является результатом сравнения ключа, в данном случае, x == 'c', тогда как второй элемент является числовым значением, связанным с ключом:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
x = 'c'
new_d = sorted(d.items(), key=lambda c:[c[0] != x, c[-1]])

Выход:

[('c', 3), ('a', 1), ('b', 2), ('d', 4)]

В Python 3.7:

print(dict(new_d))

Выход:

{'c': 3, 'a': 1, 'b': 2, 'd': 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...