我试图弄清楚如何根据每个字符串的特定部分对列表进行排序。如何写密钥?
myKey(e)
return e[-5,-2]
print(sorted(["A: (" + str(round(7.24856, 2)) + ")", "B: (" + str(round(5.8333, 2)) + ")"], key = myKey))
我希望输出看起来像这样:['B: (5.83)', 'A: (7.25)']
在我的完整代码中,列表中有两个以上的字符串,所以我不能只按字母顺序对它们进行排序。
谢谢
答案 0 :(得分:1)
您对函数myKey
的语法错误。除此之外,您还必须在字符串中切出具有正确索引的数字(从char'('+ 1的索引到最后一个字符之前的字符),并将其转换为浮点数值,以便{{1} }功能可以正常工作。
sorted
答案 1 :(得分:1)
您可以使用元组sorted()
对数据以及一些列表和字符串表达式进行排序,以获得所需的输出:
input_list = ['A:(100.27)', 'B:(2.36)', 'C:(75.96)', 'D:(55.78)']
tuples_list = [(e.split(':(')[0], float(e.split(':(')[1][:-1])) for e in input_list]
sorted_tuples = sorted(tuples_list, key=lambda x: x[1])
result = [x[0] +':('+ str(x[1]) +')' for x in sorted_tuples]
print(input_list)
print(tuples_list)
print(sorted_tuples)
print(result)
输出:
['A:(100.27)', 'B:(2.36)', 'C:(75.96)', 'D:(55.78)']
[('A', 100.27), ('B', 2.36), ('C', 75.96), ('D', 55.78)]
[('B', 2.36), ('D', 55.78), ('C', 75.96), ('A', 100.27)]
['B:(2.36)', 'D:(55.78)', 'C:(75.96)', 'A:(100.27)']