我有一个包含字符串和浮点数的列表,如何按降序排序数字并将列表打印到标准输出

时间:2018-04-27 09:13:33

标签: python sorting

我有以下列表:

mylist = [('Jim', 0.745), ('James', 0.812), ('Charlie', 0.752), ('Henry', 0.694), ('Minnie', 0.693), (None,)]

我希望按号码排序并返回:

my_list = [('James', 0.812), ('Charlie', 0.752), ('Jim', 0.745), ('Henry', 0.694), ('Minnie', 0.693), (None,)]

并将my_list打印为标准输出:

james 0.812
Charlie 0.752
Jim 0.745
Henry 0.694
Minnie 0.693
None 

我试过按照以下方式排序:

my_list = sorted(mylist, key=lambda x:(x[1]), reverse=True)

但它显示TupleError: tuple index out of range

我该怎么做才能纠正只是使用列表理解来做另一个循环来实现它?谢谢。

2 个答案:

答案 0 :(得分:3)

您可以在排序逻辑中包含元组的长度。

重点是你的lambda可以返回一个元组,Python自然会按顺序排序。然后,您可以print通过一个简单的for循环。

res = sorted(mylist, key=lambda x: (-len(x), -x[1] if len(x) > 1 else float('-inf')))

for i in res:
    print(' '.join(list(map(str, i))))

结果:

James 0.812
Charlie 0.752
Jim 0.745
Henry 0.694
Minnie 0.693
None

受juanpa.arrivillaga的启发,try / except子句是处理不常见例外的好选择:

def sorter(x):
    try:
        return x[1]
    except IndexError:
        return float('-inf')

res = sorted(mylist, key=sorter, reverse=True)

答案 1 :(得分:1)

你的上一个元组没有两个元素。使用自定义键功能:

def key(item):
    if len(item) == 2:
        return item[1]
    else:
        return 0

sorted(mylist, key=key, reverse=True)

输出:

[('James', 0.812), ('Charlie', 0.752), ('Jim', 0.745), ('Henry', 0.694), ('Minnie', 0.693), (None,)]