python排序列表与铸造

sci*_*gor 14 python sorting

我知道几次已经问过类似的问题了.我现在做了如何使用搜索功能,但它仍然无法正常工作.

所以这是问题设置.我有一个包含字符串的列表列表.一列包含实际表示浮点值的字符串.它也是我想要排序的列.问题是,python似乎忽略条目上的 - (减号)符号.所以一个示例列表:

[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]]
Run Code Online (Sandbox Code Playgroud)

像这样排序:

[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]]
Run Code Online (Sandbox Code Playgroud)

而不是它应该如何:

[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]]
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过:

  • 将第二列转换为浮动并按该列排序

喜欢:

for i in mylist:
  i[1] = float(i[1])    

mylist.sort(key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

或者

for i in mylist:
  i[1] = float(i[1]) 

mylist.sort(key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)
  • 我还尝试定义自己的比较函数:

喜欢:

mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

和上述方法的任何其他组合,也一样sorted.到目前为止,没有成功,每次都会忽略减号.怎么解决这个?

[编辑] 也已经尝试过Ignacio的建议.我应该提到我必须使用python 2.5.

Ign*_*ams 19

l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]]

l.sort(key=lambda x: float(x[1]))

>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']]
Run Code Online (Sandbox Code Playgroud)

  • 然后你已经把其他东西搞砸了,因为那样有效. (6认同)