首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更有效地从嵌套字典中获取内容

更有效地从嵌套字典中获取内容
EN

Stack Overflow用户
提问于 2018-09-21 09:07:13
回答 2查看 53关注 0票数 1

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

代码:

代码语言:javascript
复制
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)

如果我以这种方式在嵌套字典中添加更多的键,我想要的输出就像它应该自动创建一个列表(准确地说是泛型的):

代码语言:javascript
复制
{
    '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]
}

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-22 03:49:42

我想我修改了我的答案,我用更通用的way.As成功地创建了代码--我说字典列表中的键值对(如StartDecision ActionStop)可以存在,也可能不存在,也有可能添加这样的新嵌套字典,所以这不能作为通用代码生成static.Anyways:

代码语言:javascript
复制
dict = collections.OrderedDict(sorted(dict.items()))
get_total_list = []
for i, j in dict.items():
    for item in j:
        get_total_list.append(item) if item not in get_total_list else None

print("Total Legends :", get_total_list)
main_list = {}
for item in get_total_list:
    sublist = []
    for i, j in dict.items():
        if item in j:
            sublist.append(j[item])
    main_list[item] = sublist
print(main_list)
代码语言:javascript
复制
# # Output:
{u'Watermark': [100.0],
 u'Decision Action#1': [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0],
 u'Decision Logic#3': [5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0],
 u'Stop': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
 u'Start': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 5.0, 5.0, 3.0],
 u'Token Maskin Action#1': [425.0],
 u'Field Level DQ': [120.0, 115.0, 120.0, 120.0, 115.0, 120.0, 120.0, 122.0,
                     122.0, 121.0]}
票数 1
EN

Stack Overflow用户

发布于 2018-09-21 09:16:38

您可以使用列表理解:

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52440318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档