[(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)]
我需要按照数字的降序对此列表进行排序,如果遇到平局,我必须按字母顺序升序排序
最终列表应如下所示:
[(('E', 'F'), 5.0),(('F', 'G'), 5.0), (('A', 'B'), 1.0),(('A', 'C'), 1.0),(('B', 'C'), 1.0),(('B', 'D'), 1.0),(('D', 'E'), 1.0),(('D', 'F'), 1.0) (('D', 'G'), 1.0)]
答案 0 :(得分:6)
sorted(a_list,key=lambda x:(-x[-1],x[0]))
我想......如果你真的想通过你的课程,你应该努力...
答案 1 :(得分:2)
这并不像Joran的解决方案那么好,但由于Timsort稳定,你可以排序两次:
>>> my_list = [(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)]
>>> sorted(sorted(my_list, key = lambda t:t[0]), key = lambda t:t[1],reverse=True)
[(('E', 'F'), 5.0), (('F', 'G'), 5.0), (('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('D', 'G'), 1.0)]
>>>
答案 2 :(得分:0)
下面的代码适用于字典并使用其键来完成工作
testv = [(('A', 'B'), 1.0), (('A', 'C'), 1.0), (('B', 'C'), 1.0), (('B', 'D'), 1.0), (('D', 'E'), 1.0), (('D', 'F'), 1.0), (('E', 'F'), 5.0), (('F', 'G'), 5.0), (('D', 'G'), 1.0)]
testv_dict = {}
for element in testv:
if element[1] in testv_dict.keys():
testv_dict[element[1]].append(element)
else:
testv_dict[element[1]] = [element]
key_list = testv_dict.keys()
key_list.sort(reverse=True)
output_list = []
for key_i in key_list:
output_list.extend(testv_dict[key_i])