我有以下列表:
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
我该怎么做才能纠正只是使用列表理解来做另一个循环来实现它?谢谢。
答案 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,)]