python-3.x - 更有效地从嵌套字典中获取内容
问题描述
我正在遍历嵌套字典并获取不同列表中的所有值。我已经创建了完成这项工作的代码。但我需要它更有效率。有谁知道更有效的方法?
代码:
import collections
dict = {
0.5: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 120.0},
1.0: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 115.0},
2.0: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 120.0},
4.0: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 120.0},
32.0: {u'Start': 3.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 120.0},
8.0: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 115.0},
64.0: {u'Start': 2.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 123.0},
128.0: {u'Start': 5.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 122.0},
256.0: {u'Start': 3.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 121.0},
16.0: {u'Start': 0.0, u'Decision Logic#3': 5.0, u'Stop': 0.0, u'Decision Action#1': 5.0, u'Field Level DQ': 120.0}
64.0: {u'Watermark': 100.0, u'Decision Action#1': 5.0, u'Stop': 0.0,
u'Decision Logic#3': 5.0, u'Start': 5.0,
u'Token Maskin Action#1': 425.0,
u'Field Level DQ': 122.0}
}
dict = collections.OrderedDict(sorted(dict.items()))
list_start, decision_logic, stop, decision_action, field_dq = [], [], [], [], []
for main_key, main_val in dict.items():
if "Start" in main_val:
list_start.append(main_val['Start'])
if "Decision Logic#3" in main_val:
decision_logic.append(main_val['Decision Logic#3'])
if "Stop" in main_val:
stop.append(main_val['Stop'])
if "Decision Action#1" in main_val:
decision_action.append(main_val['Decision Action#1'])
if "Field Level DQ" in main_val:
field_dq.append(main_val['Field Level DQ'])
print(list_start)
print(decision_logic)
print(stop)
print(decision_action)
print(field_dq)
如果我以这种方式在嵌套字典中添加更多键,我想要的输出就像它应该自动创建一个列表(准确地说是通用的):
{
'list_start' : [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 2.0, 5.0, 3.0]
'decision_logic' : [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0]
'stop' : [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
'decision_action' : [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0]
'field_dq' : [120.0, 115.0, 120.0, 120.0, 115.0, 120.0, 120.0, 123.0, 122.0, 121.0]
}
提前致谢。
解决方案
您可以使用列表理解:
import collections
dict1 = collections.OrderedDict(sorted(dict.items()))
list_start = [j['Start'] for i,j in dict1.items()]
decision_logic = [j['Decision Logic#3'] for i,j in dict1.items()]
stop = [j['Stop'] for i,j in dict1.items()]
decision_action = [j['Decision Action#1'] for i,j in dict1.items()]
field_dq = [j['Field Level DQ'] for i,j in dict1.items()]
# Output
# list start = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 2.0, 5.0, 3.0]
# decision_logic = [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0]
# stop = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
# decision_action = [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0]
# field_dq = [120.0, 115.0, 120.0, 120.0, 115.0, 120.0, 120.0, 123.0, 122.0, 121.0]
推荐阅读
- python-3.x - 一次将可变数量分配给一堆变量
- c# - 如何更改 C# 中的未知属性?
- python-poetry - 上传到 pypiserver 时出现 409 冲突
- unity3d - 用于创建自定义资产的 AR Foundation 面部网格
- core-data - 编辑后如何将 CoreData 实体中的值显示为状态变量
- internet-explorer - Angular App 的组件未显示在 Internet Explorer 浏览器中。单水疗错误
- laravel - 在使用 PHP Sociallite laravel 后端反应原生应用程序上实现使用谷歌登录
- graphql - 如何将初始变量传递给 createPaginationContainer
- racket - 匹配类型化球拍中的哈希表
- flutter - Flutter 响应式设计方法