2011-10-06 96 views
3

我想基於每個嵌套列表的最後值對嵌套列表結構進行排序。我的名單看起來是這樣的:在Python列表中列出浮點數?

li = [['a1', 1, 1.56], ['b3', '6', 9.28], ['c2', 1, 6.25]...] 

我想輸出是:

['b3', '6', 9.28] 
['c2', 1, 6.25] 
['a1', 1, 1.56] 

我曾嘗試使用itemgetter像這樣沒有工作的幾個解決方案:

rank_list = [i.sort(key=itemgetter(2)) for i in li] 

我究竟做錯了什麼?有沒有更好的方法來排序嵌套列表?我得到一個AttributeError: 'str' object has no attribute 'sort'。謝謝您的幫助。

回答

4

你親近你的方法之一,但你真正想要的是這樣的:

li.sort(key = itemgetter(2), reverse = True) 
+0

排序工作到位,從其他答案'排序'返回一個列表。這種方法取決於你是想要一個新的列表,還是要對原件進行排序。 –

+0

非常感謝,這工作! – drbunsen

0
rank_list = sorted(li, key=itemgetter(2)) 
0

字符串不能進行排序,這就是AttributeError: 'str' object has no attribute 'sort'想告訴你。

要排序的listli

rank_list = sorted(li, key=itemgetter(2)) # to obtain a sorted copy of li 
# or just sort in place: 
li.sort(key=itemgetter(2)) 

不管你做什麼它不是你貼什麼,但:

>>> rank_list = [i.sort(key=itemgetter(2)) for i in li] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: string index out of range 
0

讓我們澄清了我們對這個問題的思考。

[i.sort(key=itemgetter(2)) for i in li]

這意味着「取每個子列表和它的元素(列表和兩個串)進行排序,使用每個作爲密鑰的第2項;累加來自那些操作的返回值的列表」。你的子列表的元素是整數和字符串; ints根本不是序列(所以你不能從它們那裏得到一個項目),並且你的一些字符串太短(當我嘗試你的例子時,我沒有得到你引用的錯誤,而是「IndexError:字符串索引超出範圍「,如預期的那樣)。即使這樣做有效,您只會得到None值的列表,因爲列表中的.sort就地對列表進行排序並返回None

你想要的是「給我這個列表的每個元素排序的每一個版本的列表」。那是sorted(li, key=itemgetter(2))。列表清單是您正在排序的內容,所以這就是您傳遞給排序功能的內容。您希望排序給出一個新的值,而不是就地影響事物,因此您可以使用免費功能sorted