嵌套字典按子字典中的值排序,然后按子字典的长度排序

问题描述 投票:0回答:1

作为一个新手,我正在努力对嵌套字典进行排序。可以说我有这两个嵌套字典作为示例:

示例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()来完成,但无法绕过确切的语法。对于任何提示将非常感谢。

python sorting dictionary nested subdirectory
1个回答
0
投票

我将首先通过中间表示来关联元素所属的组的大小,以便在排序中使用它。

>>> 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)]
© www.soinside.com 2019 - 2024. All rights reserved.