首页 > 解决方案 > 更有效地从嵌套字典中获取内容

问题描述

我正在遍历嵌套字典并获取不同列表中的所有值。我已经创建了完成这项工作的代码。但我需要它更有效率。有谁知道更有效的方法?

代码:

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]
}

提前致谢。

标签: python-3.xdictionary

解决方案


您可以使用列表理解:

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]

推荐阅读