如何解决按值升序和按键降序对字典排序
我正在尝试对字典进行排序,我要遵循的顺序是,首先,字典应该按值以升序排序,如果两个或多个键的值相等,那么我想对字典进行排序按按键降序。
代码如下:
dictionary = {0: 150,1: 151,2: 150,3: 101,4: 107}
print(sorted(dictionary.items(),key=lambda x: (x[1],x[0])))
我希望输出如下:
[(3,101),(4,107),(2,150),(0,(1,151)]
但是输出是:
[(3,151)]
解决方法
由于此处的值是数字,因此可以使用取反与反转排序顺序具有相同的作用:
sorted(dictionary.items(),key=lambda x: (x[1],-x[0]))
对于更通用的情况,您不能依赖于数字值,这是一种可能的方法,尽管可能有更好的方法。
from functools import cmp_to_key
def cmp(a,b):
# https://stackoverflow.com/a/22490617/13596037
return (a > b) - (a < b)
def cmp_items(a,b):
"""
compare by second item forward,or if they are the same then use first item
in reverse direction (returns -1/0/1)
"""
return cmp(a[1],b[1]) or cmp(b[0],a[0])
dictionary = {0: 150,1: 151,2: 150,3: 101,4: 107}
print(sorted(dictionary.items(),key=cmp_to_key(cmp_items)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。