排序元组的元组的列表
问题描述:
[((D,A),0.0),((D,C),0.0),((D,E),0.5)]
我需要对列表进行排序为:排序元组的元组的列表
[((D,E),0.5),((D,A),0.0),((D,C),0.0)]
我已经使用了sorted()
功能,我能够基于价值观0.5, 0.0
排序......但我不能够按字母顺序排序,因为如果数字具有相同的值,我需要按照数字降序排列列表并按字母升序排序。
答
使用一个元组的排序键带有负上浮子颠倒顺序:
>>> li=[(('D','A'),0.0),(('D','C'),0.0),(('D','E'),0.5)]
>>> sorted(li, key=lambda t: (-t[-1],t[0]))
[(('D', 'E'), 0.5), (('D', 'A'), 0.0), (('D', 'C'), 0.0)]
如果你不能做否定(一个字符串或字母值或东西的非数字表示),那么你可以利用一个事实,即Python的排序功能是稳定的,并做排序分为两步:
>>> li=[(('D','A'),'A'),(('D','C'),'A'),(('D','E'),'C')]
>>> sorted(sorted(li), key=lambda t: t[-1], reverse=True)
[(('D', 'E'), 'C'), (('D', 'A'), 'A'), (('D', 'C'), 'A')]
+0
Nice and Nifty code !!!!非常感谢@dawg –
+0
关于如何在Python中排序,有一个很棒的[概述](https://wiki.python.org/moin/HowTo/Sorting)。 – dawg
答
同样,你可以用一个迭代提供sorted
那就是另一sort
结果:
>>> from operator import itemgetter
>>> t = [(('D','A'),0.0),(('D','C'),0.0),(('D','E'),0.5)]
>>> sorted(sorted(t), key=itemgetter(1), reverse=True)
[(('D', 'E'), 0.5), (('D', 'A'), 0.0), (('D', 'C'), 0.0)]
'sorted(li,key = lambda t:(-t [-1],t [0]))' – dawg