Как отсортировать список словарей в словаре и перезаписать его в python

У меня есть словарь, который содержит список словарей:

example = {
"first": [
 {"a": 1, "b": 2},
 {"a": 0, "x": 5}
],
"second": [
{"a": 5, "b": 2},
{"a": 2, "x": 5}
]
}

Я хочу отсортировать списки «первый» и «второй» на основе значений ключа «а». Желаемый результат:

desired = {
"first": [
 {"a": 0, "x": 5},
 {"a": 1, "b": 2}
],
"second": [
{"a": 2, "x": 5},
{"a": 5, "b": 2}
]
}

Теперь я не хочу создавать совершенно новый словарь. Просто обновите списки «первый» и «второй» в «примере» dict. Что я пробовал:

from operator import itemgetter

for k, v in example.items():
    v = sorted(v, key=itemgetter('a'))

Это не влияет на мой пример словаря. Однако он работает для одного списка, например:

x = [{"a": 1, "b": 2},
    {"a": 0, "x": 5}
]
z = sorted(x, key = itemgetter('a'))
>>> print(z)
[{'a': 0, 'x': 5}, {'a': 1, 'b': 2}]

Ваш первый пример не сработал, потому что v не имеет обратной связи с исходным словарем; это просто обычная локальная переменная.

John Gordon 23.12.2020 16:59

Один лайнер без необходимости itemgetter. example = {k: sorted(v, key=lambda x: x['a']) for k, v in example.items()}

Axe319 23.12.2020 17:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
187
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это связано с тем, что когда вы назначаете отсортированный список, вы просто указываете «метку» v на отсортированный список, а не записываете его в словарь. См. ниже, этот код должен делать то, что вы хотите.

for k, v in example.items():
    example[k] = sorted(v, key=itemgetter('a'))

sorted возвращает новый отсортированный список. В списке есть встроенный метод sort, который сортирует список на месте.

for v in example.values():
    v.sort(key=itemgetter('a'))

Другие вопросы по теме