2011-04-03 47 views
0

我有一個列表排序,其具有值列表的字典,和分選基於該列表

A={'k3': ['b', 3],'k2': ['a', 1],'k1': ['a', 3],'k4': ['c', 2],'k5': ['b', 2]} 

欲由字母「a」第一排序上述字典內的元素,「b」和'c'按升序排列

然後基於值3,2,1按降序排列。所以我的輸出應該看起來像

A={'k1': ['a', 3],'k2': ['a', 1],'k3': ['b', 3],'k5': ['b', 2],'k4': ['c', 2]} 

我該怎麼做?

回答

0

AFAIK字典沒有「秩序」

0

無法排序類型的字典概念 - 沒有對類型的字典定義排序。

0

詞典不可排序。您可能需要使用列表來代替。

例如,您輸入可以表示爲元組的列表:

A=[('k3', ['b', 3]),('k2', ['a', 1]),('k1',['a', 3])...] 

而且我們可以像這樣對它進行排序:

A=sorted(A, key=lambda x: (x[1][0], -x[1][1])) 
+0

感謝。有用。我一直使用itemgetter()完成排序,當事情沒有嵌套時,它工作得很好 – ranjan 2011-04-03 18:56:18

+0

很高興聽到它 - 你可以投我一票嗎? :-) – 2011-04-03 19:02:55

+0

嘗試過,但它似乎我沒有足夠的聲望點:( – ranjan 2011-04-04 10:54:22

2

字典是無序的,所以你不能創建一個有序的字典。

如果你只是想字典鍵的列表,由相關值進行排序,你可以使用sorted()這樣的:

>>> keys = sorted(A, key=lambda k: (A[k][0], -A[k][1])) 
>>> keys 
['k1', 'k2', 'k3', 'k5', 'k4'] 
0

什麼:

sorted(A, key = lambda x: (A[x][0], -A[x][1])) 

至少它給你的訂購鑰匙。