如何按子列表中的某个项目对列表进行排序?

时间:2014-02-28 11:23:26

标签: python

我有一个如下所示的列表:

list = [[u'schei\xdfunwetter', u'storm', u'0.0007813'], [u'schei\xdfunwetter', u'goddamn', u'0.0002343'], [u'ingenieurin', u'night', u'0.0000442'], [u'ingenieurin', u'you', u'0.0000008'], [u'ingenieurin', u'NULL', u'0.0000004'], [u'ingenieurin', u'last', u'0.0000472'], [u'ingenieurin', u'anything', u'0.0000328']]

我想按数字(=概率)对此列表进行排序。 通过以前的问题/答案查看Stackoverflow,我找到了以下解决方案,它似乎适用于列表(li = [['a1', 1, 1.56], ['b3', '6', 9.28], ['c2', 1, 6.25]...]):

list.sort(key=itemgetter(2))

但是,根据我的数据,这不起作用并返回NONE。 由于我认为它与数字是字符串有关,我尝试了以下内容:

sorted_list = list.sort(key=lambda x: int(x[2]))

,但这会返回另一个错误:

ValueError: invalid literal for int() with base 10: '0.0000723'

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

In [24]: sorted(seq, key=lambda x: float(x[2]))
Out[24]: 
[[u'ingenieurin', u'NULL', u'0.0000004'],
 [u'ingenieurin', u'you', u'0.0000008'],
 [u'ingenieurin', u'anything', u'0.0000328'],
 [u'ingenieurin', u'night', u'0.0000442'],
 [u'ingenieurin', u'last', u'0.0000472'],
 [u'schei\xdfunwetter', u'goddamn', u'0.0002343'],
 [u'schei\xdfunwetter', u'storm', u'0.0007813']]
  • 使用float代替int
  • 使用sorted function代替sort method。排序方法 返回None并修改列表。 sorted函数返回列表的排序副本。如果你想分配 结果到sorted_list,那么您需要使用sorted 功能
  • 永远不要命名变量list,因为它会影响变量的内置 同名。

答案 1 :(得分:0)

你必须尝试

>>> list.sort(key=lambda x: x[2])
>>> list
[[u'ingenieurin', u'NULL', u'0.0000004'], [u'ingenieurin', u'you', u'0.0000008'], [u'ingenieurin', u'anything', u'0.0000328'], [u'ingenieurin', u'night', u'0.0000442'], [u'ingenieurin', u'last', u'0.0000472'], [u'schei\xdfunwetter', u'goddamn', u'0.0002343'], [u'schei\xdfunwetter', u'storm', u'0.0007813']]

list.sort将对自己执行操作。它将返回None。如果必须创建新的排序列表,则必须使用sorted内置函数。