python排序列表与铸造

时间:2010-12-02 09:18:45

标签: python sorting

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

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

[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]]

按如下方式排序:

[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]]

而不是它应该如何:

[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]]

到目前为止,我已尝试过:

  • 将第二列投射到浮动状态 并按该列排序

像:

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

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

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

mylist.sort(key=operator.itemgetter(1))
  • 我也尝试定义自己的比较 功能:

像:

mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1))

以上方法的任何其他组合,也与sorted相同。到目前为止,没有成功,每次都会忽略减号。怎么解决这个?

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

2 个答案:

答案 0 :(得分: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']]

答案 1 :(得分:2)

我的工作正常,Python 3.1.2:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]

和2.6.5:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']]
>>> sorted(l,key=lambda x:float(x[1]))
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']]