2014-02-28 104 views
2

我有一個列表,它看起來如下:如何通過子列表中的某個項目對列表進行排序?

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']] 

我想對這個文件列表由號碼(=概率)。 通過以前的問題/答案#2看,我發現下面的解決方案,這似乎已經工作了名單(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' 

誰能幫助?

+0

list.sort * always * returns None。該列表已排序。 – RemcoGerlich

回答

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。排序方法 返回無並修改列表中的適當位置。 sorted函數返回列表的排序副本。如果要將 的結果分配給sorted_list,則需要使用sorted 函數。
  • 從不命名變量list,因爲它會隱藏 同名的內建值。
+0

我不知道排序和排序有什麼區別 - 謝謝指出!它現在有效...非常感謝! – user3265565

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

相關問題