2017-09-26 131 views
0

我創建了一個列表字典。Python:按元素排序列表字典

{'chans': [['24', 'X', 'RCP', '8400.0', 'mex', '325.0K', '8', '50 1', '17', 266, **datetime.time(22, 0)**, '17', 266, datetime.time(23, 0), '00', '23', '00', 20.604799168660975, '041'], 
['24', 'X', 'RCP', '8400.0', 'ody', '325.0K', '4', '40 1', '17', 266, **datetime.time(17, 0)**, '17', 266, datetime.time(18, 0), '00', '18', '00', 16.31949387241184, '053'], 
['24', 'X', 'RCP', '8400.0', 'mro', '325.0K', '8', '50 1', '17', 266, **datetime.time(18, 0)**, '17', 266, datetime.time(19, 0), '00', '19', '00', 27.872042154574956, '074']]} 

我需要使用日期時間對象(每個列表中的元素10)以升序排序。我被困在確定正確的鍵/值。實質上,我不知道該怎麼做。

回答

0

sort功能

有一個sort功能(就地)和sorted功能(返回列表排序)。其中每一個都有一個稱爲key的可選參數,它在每個元素上被調用以進行比較。在你的情況下,你想打電話sort(dictionary["chans"]),這將排序列表。既然你要在每個列表中的第11要素進行排序,你可以這樣做:

sort(dictionary["chans"], key = lambda sublist: sublist[10]) 

關鍵需要一個子表,並返回其第11要素,所以sort是他們的第11單元(日期時間)排序的子列表。

無論您想要滿足您的需求,您都可以製作key

+0

我看到現在發生的事情,我沒有說明字典中的'混亂'部分。 – Eric

+0

這個伎倆,非常感謝你! – Eric

1

您可以使用itemgetter,只是在列表中選擇該項目的索引不是字典,我們不能爲了一個dictionnary,

from operator import itemgetter 
import datetime 

f = {'chans': [['24', 'X', 'RCP', '8400.0', 'mex', '325.0K', '8', '50 1', '17', 266, """datetime.time(22, 0)""", '17', 266, datetime.time(23, 0), '00', '23', '00', 20.604799168660975, '041'], 
['24', 'X', 'RCP', '8400.0', 'ody', '325.0K', '4', '40 1', '17', 266, """datetime.time(17, 0)""", '17', 266, datetime.time(18, 0), '00', '18', '00', 16.31949387241184, '053'], 
['24', 'X', 'RCP', '8400.0', 'mro', '325.0K', '8', '50 1', '17', 266, """datetime.time(18, 0)""", '17', 266, datetime.time(19, 0), '00', '19', '00', 27.872042154574956, '074']]} 

sorted(f['chans'], key=itemgetter(10)) 
+0

'itemgetter'是一件東西? :o很酷,感謝信息:P – HyperNeutrino

+0

https://docs.python.org/2/library/operator.html#operator.itemgetter –