Как отсортировать вложенный словарь в Python 2 раза?

#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])}
  

Выглядит немного некрасиво, но он выполняет свою работу