Python 如何对嵌套字典进行排序?
我想对嵌套字典按值排序,余数按另一个值排序,余数按另一个值排序。我有三个标准。对于三个条件中的两个,我想将reverse=True,但对于第三个条件,我想将reverse=False。如何使用反向和lambda进行此操作? 下面是一段代码: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
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]
作为第三项吗?