用类型转换对列表中的列表进行排序
我知道类似的问题已经被问过好几次了。我也知道怎么用搜索功能,但它还是没用。
下面是我的问题情况。我有一个包含字符串的列表的列表。其中一列包含的字符串实际上代表浮点数值。而我想要根据这一列进行排序。问题是,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 个回答
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', '']]
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']]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。