通过排序第二层字典对多层字典进行排序

时间:2016-04-15 15:53:48

标签: python sorting dictionary

如何通过重新排列第二层字典的键来排序多层字典?我认为一个例子是更好的呈现方式。

原始多层词典:
ManipulationMode.System

我正在尝试通过更改第一层字典来排列第二层字典,并同时将第二层键值对移动到一起。第二层字典键的顺序为{'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}}预期输出如下:
High <1 day, Low <1 day, High >1 day, Low >1 day, High >3 days, Low >3 days.

2 个答案:

答案 0 :(得分:0)

要实现这一目标,您需要OrderedDict模块中的collections。有关参考,请参阅此post

答案 1 :(得分:0)

我认为你对字典是什么有一个根本的误解。排序字典的键是没有意义的,因为字典是无序的。密钥在字典中的位置/方式无关紧要。我认为你有两种选择。

如果您的密钥按特定顺序排除,则可以使用ordered dict。这将记住您将密钥插入字典的顺序。如果您已有当前的dict,可以使用以下代码将其转换为有序的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时所做的那样,你可以创建一个变量并循环遍历它以按特定顺序访问dict键。

另一个reference post