我知道有几次问过类似的问题。我现在做了如何使用搜索功能,但它仍然无法正常工作。
所以这是问题设置。我有一个包含字符串的列表列表。一列包含实际表示浮点值的字符串。它也是我想要排序的列。问题是,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。
答案 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', '']]