我有一个list
tuple
个,每个元组包含两个整数。我需要根据每个元组中整数的差异对列表进行排序(以相反的顺序排序),但是要打破与较大的第一个整数的关系。
示例
对于[(5, 6), (4, 1), (6, 7)]
,我们应该[(4, 1), (6, 7), (5, 6)]
。
我的方式
我已经通过制作一个dictionary
来解决它,其中包含key
的差异和value
的元组。但整件事情有点笨拙。
什么是更好的方式?
答案 0 :(得分:16)
使用key
函数sorted()
并返回元组;值将按字典顺序排序:
sorted(yourlst, key=lambda t: (abs(t[0] - t[1])), t[0]), reverse=True)
我在这里使用abs()
来计算差异,无论两个整数中哪一个更大。
对于您的示例输入,密钥会生成(1, 5)
,(3, 4)
和(1, 6)
;以相反顺序将(1, 6)
((6, 7)
元组)放在(1, 5)
之前(与(5, 6)
对应)。
演示:
>>> yourlst = [(5, 6), (4, 1), (6, 7)]
>>> sorted(yourlst, key=lambda t: (abs(t[0] - t[1]), t[0]), reverse=True)
[(4, 1), (6, 7), (5, 6)]
答案 1 :(得分:1)
鉴于此list=[('a','b',3),('d','e',3),('e','f',5)]
,如果您想按数字降序排列,但要使用第一个字母的升序来打领带(当计数等于本示例中的“ 3”时)元素,然后是第二个元素,下面的代码可以正常工作:
sorted(list,key=lambda x: (-x[2],x[0],x[1]))
此处,x [2]上的'-'符号表示需要按降序排序。
输出将为:[('e', 'f', 5), ('a', 'b', 3), ('d', 'e', 3)]