我正在遍历嵌套字典并获取不同列表中的所有值。我已经创建了完成这项工作的代码。但是我需要提高效率。有谁知道更有效的方法?
代码:
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]
}
谢谢。
答案 0 :(得分:1)
您可以使用列表理解:
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 :(得分:1)
我认为我修改了答案,并以更通用的方式成功创建了代码。正如我所说的列表中的键值对(例如Start
,Decision Action
,Stop
)字典可以存在也可以不存在,并且有可能添加这样的新嵌套字典,因此不能将其设置为静态。无论如何,这是通用代码:
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)
# # 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]}