首页 > 解决方案 > 使用第二个键对嵌套字典进行排序

问题描述

我正在尝试使用我的字典看起来像的第二个键对嵌套字典进行排序:

my_dictionary = {
    "char": {
        "3": {
            "genman": [
                "motion"
            ]
        }
    }, 
    "fast": {
        "2": {
            "empty": []
        }
    }, 
    "EMPT": {
        "0": {}
    }, 
    "veh": {
        "1": {
            "tankers": [
                "varA", 
                "varB"
            ]
        }
    }
}

我的预期输出将是:

my_dictionary = {
    "EMPT": {
        "0": {}
    }, 
    "veh": {
        "1": {
            "tankers": [
                "varA", 
                "varB"
            ]
        }
    },
    "fast": {
        "2": {
            "empty": []
        }
    },
    "char": {
        "3": {
            "genman": [
                "motion"
            ]
        }
    }
}

尝试使用以下代码:

new_dict = {}
for k, v in my_dictionary.items():
    for s in sorted(my_dictionary.itervalues()):
        if not s.keys()[0]:
            new_val = my_dictionary[k].get(s.keys()[0])
            my_dictionary[s.keys()[0]] = new_val
            my_dictionary.update(new_dict)

它失败得很厉害,我得到的结果与我最初的字典相同。

标签: pythondictionarydictionary-comprehension

解决方案


这有效:

sorted(my_dictionary.items(), key=lambda x: list(x[1].keys())[0])

回报:

[('EMPT', {'0': {}}),
 ('veh', {'1': {'tankers': ['varA', 'varB']}}),
 ('fast', {'2': {'empty': []}}),
 ('char', {'3': {'genman': ['motion']}})]

Sorted 接收一个键值对列表,我们使用它的结果进行排序,该结果lambda x: list(x[1].keys())[0]获取内部 dict 中的键列表,然后获取第一个键(需要这样做,因为 dict_keys 直接不可索引)。

编辑:结果是键值对的列表,但可以将其输入 OrderedDict 以将其用作字典。


推荐阅读