#python
#python
Вопрос:
У меня есть словарь, который имеет другой словарь в качестве значения. Как я могу отсортировать его сначала по ключу (по возрастанию), а затем по значению второго словаря (по убыванию)?
my_dict = {'B':{'contest':30, 'contest_two':50, 'contest_three':40}
'A':{'contest_four':50, 'contest_five':60, 'contest_six':70}}
Я хочу получить это :
my_dict = {'A':{'contest_six':70, 'contest_five':60, 'contest_four':50}
'B':{'contest_two':50, 'contest_three':40, 'contest':30 }}
Я пробовал это my_dict = dict(sorted(my_dict.items(), key=lambda x: (x[0],x[1].values())))
, но, очевидно, это не сработало.
Ответ №1:
У вас проблема с фокусом в вашем дизайне: вы утверждаете, что сортируете только один dict, но ваш желаемый результат сортирует все три: my_dict, my_dict[‘A’] и my_dict[‘B’] . Вы должны вызывать sorted
на обоих уровнях:
{letter: {contest: score
for contest, score in
sorted(sub_dict.items(), key=lambda val: val[1], reverse=True)
} for letter, sub_dict in sorted(my_dict.items(), key=lambda val: val[0])
}
Ответ №2:
Вы можете использовать понимание вложенных терминов для отсортированных пар ключ / значение :
d = {k: {k2: v for k2, v in sorted(dic.items(), key=lambda x: x[1], reverse=True)} for k, dic in sorted(my_dict.items(), key=lambda x: x[0])}
Выглядит немного некрасиво, но он выполняет свою работу