2016-04-15 266 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以供参考。