我正在尝试使用第二个键对嵌套字典进行排序,其中第二个键的字典如下:
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)
它严重失败,并且我得到的结果与最初的字典相同。
答案 0 :(得分:2)
这有效:
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中以用作字典。
答案 1 :(得分:1)
实际上没有命令,但是您可以使用OrderedDIct。
from collections import OrderedDict
my_dictionary = {
"char": {
"3": {
"genman": [
"motion"
]
}
},
"fast": {
"2": {
"empty": []
}
},
"EMPT": {
"0": {}
},
"veh": {
"1": {
"tankers": [
"varA",
"varB"
]
}
}
}
s = sorted((list(v.keys())[0], k) for k, v in my_dictionary.items())
new_dic = OrderedDict([(k,my_dictionary[k]) for _, k in s])