Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
144 views
in Technique[技术] by (71.8m points)

python - Sorting list of tuples of tuples

[((D,A),0.0),((D,C),0.0),((D,E),0.5)]

I need to sort the list as:

[((D,E),0.5),((D,A),0.0),((D,C),0.0)]

I have used the sorted() function and I am able to sort based on values 0.5, 0.0... But I am not able to sort on the alphabetical order as I need the list to be sorted in descending order by the numbers and in ascending order of alphabets if the numbers have same value.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use a tuple as the sort key with a negative on the float to reverse the order:

>>> 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)]

If you cannot do negation (say on a string or letter value or something non numeric) then you can take advantage of the fact that the Python sort function is stable and do the sort in two steps:

>>> 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')]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...