首页 > 解决方案 > 如何对嵌套字典进行排序?

问题描述

我想按值对嵌套字典进行排序,按另一个值对余数进行排序,再按另一个值对余数进行排序。我有三个标准。我想给他们三个中的两个分配reverse=True,但是对于第三个条件我想分配reverse=False。如何使用 reversed 和 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] 不能是相反的。

标签: pythonsortingdictionarylambda

解决方案


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

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)

推荐阅读