2016-04-15 157 views
0

如何通過重新排列第二層字典的鍵來排序多層字典?我認爲一個例子會是一個更好的呈現方式。通過排序第二層字典對多層字典進行排序

原始多層詞典:
{'John': {'Low >3 days': 3,'Low >1 day': 2,'High <1 day': 2,'High >3 days': 3,'Low <1 day': 1,'High >1 day': 1},'Mary': {'High >1 day': 5,'High >3 days': 1,'Low <1 day': 0, 'Low >1 day': 2, 'Low >3 days': 9, 'High <1 day': 5}}

我在安排和變更的第2層字典中的第一層字典和在同一時間一起移動,第二層鍵 - 值對。第二層的字典鍵的順序是High <1 day, Low <1 day, High >1 day, Low >1 day, High >3 days, Low >3 days.預期結果將是如下:
{'John': {'High <1 day': 2,'Low <1 day': 1,'High >1 day': 1,'Low >1 day': 2,'High >3 days': 3,'Low >3 days': 3},'Mary': {'High <1 day': 5,'Low <1 day': 0,'High >1 day': 5,'Low >1 day': 2,'High >3 days': 1,'Low >3 days': 9}}

回答

0

我認爲你對字典的基本誤解是什麼。排序字典的鍵是沒有意義的,因爲字典是無序的。密鑰在字典中的位置/方式並不重要。我認爲你有兩個選擇。


如果你是死心塌地的做你的鑰匙在一個特定的順序,你可以使用一個ordered dict。這將記住您將密鑰插入字典的順序。如果您已經有了當前字典,可以使用以下代碼將其轉換爲有序字典。

from collections import OrderedDict 
exDict = #... put your dict here 
keyOrder = ['High <1 day', 'Low <1 day', 'High >1 day', 'Low >1 day', 'High >3 days', 'Low >3 days'] 
ordDict = OrderedDict() 
for k in exDict.keys(): 
    ordDict[k] = OrderedDict() 
    for kO in keyOrder: 
     ordDict[k][kO] = exDict[k][kO] 

如果你想打印出來或者以特定的順序訪問的信息,那麼你應該定義一個變量要訪問鍵的順序。就像我在上面定義keyorder時所做的那樣,您可以創建一個變量並循環以便以特定順序訪問字典鍵。


另一個reference post

0

要做到這一點,你需要一個OrderedDictcollections模塊。請參閱此post以供參考。