2016-07-26 33 views
-1

通過預定義的值類型的字典的名單上有類型的字典的Python中的列表,可以說:排序在Python

mylist = [{key1: value1, key2: value2}, {key1: value3, key2: value4}, {key1: value5, key2: 'something else'},]

而且我要這樣按預定順序排序該列表

x = ['something else', value4, value2]

編輯:

我的預期結果爲:

mylist = [{key1: value5, key2: 'something else'}, {key1: value3, key2: value4}, {key1: value1, key2: value2}, ]

所以基本上在列表X的順序排序上鍵2這個名單。對不起,缺乏清晰度。

我發現的所有內容都是按字母順序或數字順序排序,但不包括特殊順序。任何幫助,高度讚賞。

親切的問候 奧利弗

+1

什麼是你的 「空間」 訂單價值排序 ? –

+1

請添加您想要的輸出......目前尚不清楚。 –

+0

什麼定義了訂單?你按什麼排序?它僅僅是列表條目的插入順序嗎?字符串是否先排序?相同的密鑰是否按順序組合在一起?截至目前,這個問題非常模糊! – ospahiu

回答

2

。你需要鑰匙來定義訂單。

>>> mylist 
[{1: 1, 2: 2}, {1: 3, 2: 4}, {1: 5, 2: 'something else'}] 
>>> x 
['something else', 4, 2] 
>>> sorted(mylist, key = lambda item: sum([ x.index(i) if i in x else len(x) for i in item.values()])) 
[{1: 5, 2: 'something else'}, {1: 3, 2: 4}, {1: 1, 2: 2}] 

--update--
,如果你想通過第二

sorted(mylist, key = lambda item: x.index(item[item.keys()[1]])) 
0

您可能需要某種形式的拉姆達:

>>> l = [1,5,2,6] 
>>> sorted(l,cmp=lambda x,y:x-y) 
[1,2,5,6] 
>>> sorted(l,cmp=lambda x,y:y-x) 
[6,5,2,1] 

只需修改拉姆達使用排序功能,可以做它在某種程度上比較兩個值