繁体   English   中英

如何对嵌套字典进行排序?

[英]How to sort a nested dictionary?

我想按值对嵌套字典进行排序,并按另一个值进行余数,再按另一个值对余数进行排序。 我有三个标准。 对于其中三个中的两个,我想分配 reverse=True,但对于第三个条件,我想分配 reverse=False。 如何使用反向和 lambda 来做到这一点? 这是一段代码:

result = sorted(dict_punkty.items(), key=lambda k: (k[1]["W"], k[1]["PKT"], k[1]), reverse=True)

k[1]["W"] 和 k[1]["PKT"] 必须倒序,k[1] 不能倒序。

我找不到更短的东西,所以我建议以下解决方案:

dict_punkty={'Jan': {'W': 1, 'PKT': 25}, 'Artur': {'W': 1, 'PKT': 20}, 'Karol': {'W': 0, 'PKT': 10}}

# Put key names in a list sorted in reverse order
names = sorted(dict_punkty.keys(), reverse=True)

# Put names and their order in a temporary dictionary
names = {name: i for i, name in enumerate(names)}

# Put the data in a list of tuples replacing key names with order numbers
result = [(names[k[0]], k[1]) for k in dict_punkty.items()]

# Sort the list of tuples
result = sorted(result, key=lambda k: (k[1]["W"], k[1]["PKT"], k[0]), reverse=True)

# Reverse names/orders as keys/values in the temporary dictionary
names = {i: name  for name, i in names.items()}

# Get the final result by replacing the order numbers with key names
result = [(names[k[0]], k[1]) for k in result]

print(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM