作为一个新手,我正在努力对嵌套字典进行排序。可以说我有这两个嵌套字典作为示例:
示例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}}
现在,我需要按照得分降序对球员进行排序,然后再按照每支球队/颜色内球员的总数按降序进行排序。打印输出应如下所示:
例如:(黄色)Sasho 4500(红色)Pesho 2000(蓝色)东照 1000(绿色)五所 1000(Stamat)Prakasho 1000
例如2:(蓝色)Pesho 10000(蓝色)高翔 10000(红色)Pesho 10000
我想这可以使用lambdas通过sorted()来完成,但无法绕过确切的语法。对于任何提示将非常感谢。
我将首先通过中间表示来关联元素所属的组的大小,以便在排序中使用它。
>>> 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)]
然后使用其中使用两个比较项(score, size of group)
的lambda函数进行排序。
>>> sorted(l2, key=lambda x:(int(x[2]),x[3]),reverse=True)
[('Blue', 'Pesho', 10000, 2), ('Blue', 'Gosho', 10000, 2), ('Red', 'Pesho', 10000, 1)]