首页 > 解决方案 > 如何在 Python 中对嵌套字典进行 2 次排序?

问题描述

我有一本字典,其中有另一本字典作为值。如何首先按键(升序)排序,然后按第二个字典的值(降序)排序?

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()))),但显然它没有用。

标签: python

解决方案


您的设计中有一个焦点问题:您声称您只对一个 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])
}

推荐阅读