在列表中对元组的元组进行排序

时间:2016-09-28 23:24:20

标签: python python-3.x

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

3 个答案:

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