python - 使用第二个键对嵌套字典进行排序
问题描述
我正在尝试使用我的字典看起来像的第二个键对嵌套字典进行排序:
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)
它失败得很厉害,我得到的结果与我最初的字典相同。
解决方案
这有效:
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 以将其用作字典。
推荐阅读
- html - 为什么我的 Bootstrap 4 NavBar 在右侧给了我一个空白区域?
- java - 如何将类型映射到Scala中的值?
- python - Python:刷新 Excel 工作表并作为值复制到其他工作表
- android - .xml 中 RadioButton 的错误事件 onclick
- java - 如何拆分多个SQL语句块使用antlr4?
- c++ - OpenCV G-API findContours:将结果传递给内核?
- mysql - 如何处理具有多值列的数据集?
- javascript - 为在 localhost 上托管的 iframe 中加载的页面覆盖“跨域对象上的权限被拒绝 [...]”
- python - 应用程序中未显示滚动条 | 基维
- c - 使用 fork() 创建 N 进程的算法正在打印重复值