如何在Python中的每个字符串内基于浮点数对列表进行排序?

时间:2019-04-14 00:28:47

标签: python

我试图弄清楚如何根据每个字符串的特定部分对列表进行排序。如何写密钥?

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

在我的完整代码中,列表中有两个以上的字符串,所以我不能只按字母顺序对它们进行排序。

谢谢

2 个答案:

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