Сортировка вложенного словаря по значениям во вложенном словаре, а затем по длине подсловаря

Как новичок я борюсь с сортировкой вложенного словаря. Допустим, у меня есть два вложенных словаря в качестве примеров:

Пример 1:

{'Red': {'Pesho': 2000}, 'Blue': {'Tosho': 1000}, 'Green': {'Gosho': 1000}, 'Yellow': {'Sasho': 4500}, 'Stamat': {'Prakasho': 1000}}

Пример 2:

{'Red': {'Pesho': 10000}, 'Blue': {'Pesho': 10000, 'Gosho': 10000}}

Теперь мне нужно отсортировать игроков по пунктам в порядке убывания, а затем по общему количеству игроков в каждой команде / цвете снова в порядке убывания. Вывод на печать должен выглядеть следующим образом:

Например 1:
(Желтый) Сашо <-> 4500
(Красный) Пешо <-> 2000
(Синий) Тошо <-> 1000
(Зеленый) Гошо <-> 1000
(Стамат) Пракашо <-> 1000

Например 2:
(Синий) Пешо <-> 10000
(Синий) гошо <-> 10000
(Красный) Пешо <-> 10000

Я полагаю, что это можно сделать с помощью sorted () с использованием лямбда-выражений, но я не могу исказить точный синтаксис. Буду очень признателен за любые советы.

Всего 1 ответ


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

>>> l2 = [(k,el,d[k][el],len(v)) for k,v in d.items() for el in v]
>>> l2
[('Red', 'Pesho', 10000, 1), ('Blue', 'Pesho', 10000, 2), ('Blue', 'Gosho', 10000, 2)]

а затем сортировать с помощью лямбда-функции, в которой используются 2 условия сравнения (score, size of group) .

>>> sorted(l2, key=lambda x:(int(x[2]),x[3]),reverse=True)
[('Blue', 'Pesho', 10000, 2), ('Blue', 'Gosho', 10000, 2), ('Red', 'Pesho', 10000, 1)]

Есть идеи?

10000