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

Python 如何对嵌套字典进行排序?,python,sorting,dictionary,lambda,Python,Sorting,Dictionary,Lambda,我想对嵌套字典按值排序,余数按另一个值排序,余数按另一个值排序。我有三个标准。对于三个条件中的两个,我想将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

我想对嵌套字典按值排序,余数按另一个值排序,余数按另一个值排序。我有三个标准。对于三个条件中的两个,我想将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)

如果这些值是数值,您只需按
-value
对所需值按相反顺序排序即可。但是我们不知道,所以您应该提供一个最小的示例dict.{'Jan':{'W':1,'PKT':25},'Artur':{'W':1,'PKT':20},'Karol':{'W':0,'PKT':10}}@kasiabadio:
k[1]
是一个dict,但在python3中,dict是顺序比较,即使在python2中,dict的顺序也是如此。那么(我假设您使用的是Python 2),
k[1]
被排序为“不按相反顺序”意味着什么呢?既然顺序没有定义,那么这与反向顺序有何不同?您的意思是将
k[0]
作为第三项吗?