python - 如何对嵌套字典进行排序?
问题描述
我想按值对嵌套字典进行排序,按另一个值对余数进行排序,再按另一个值对余数进行排序。我有三个标准。我想给他们三个中的两个分配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] 不能是相反的。
解决方案
我找不到更短的东西,所以我建议以下解决方案:
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)
推荐阅读
- javascript - 在使用隐藏画布上传之前旋转图像
- python - 在 Python 中比较两个字典的值,并返回差值大于 2 的值的键
- c# - 从图片框保存图像时参数无效异常
- jquery - Jquery如何在数据属性数组中选择包含特定值的元素?
- reactjs - “IntrinsicAttributes & Props”类型上不存在 className
- java - 如何将主类中的对象添加到其他类Java中的ArrayList
- laravel - 在 laravel 6 中未添加主键作为对外键的引用
- android - 如何使用 MOSHI 将 un json 字符串解析为列表
- r - R循环添加另一列而不是放下它(Gephi导出)
- java - Java Swing 无法删除组件