我正在尝试拆分一个字符串列表,并从这些字符串中创建一个深度嵌套的dict(最里面的值是一个列表)。然后我需要在列表中添加一个值。因为我的一些字符串是重复的,所以我需要确定正确的深度嵌套列表,以便附加到该列表。例如:
d = {'mykey': 'myval'}
my_strings = ['key1_key2_key3', 'key54_key6_key85_key86',
'key1_key2_key3', 'key1_key2',
'key54_key6_key85_key86', 'key103_key508_key2',
]
master_d = {}
for my_s in my_strings:
key = my_s.split('_')
my_d = {'my_list': [d]}
for s in reversed(key):
my_d = {s: my_d} # e.g. {'key1': {'key2': {'key3': {'my_list': [{'mykey': 'myval'}]}}}}
for k, v in my_d.iteritems():
if k in master_d and v.keys() == master_d[k].keys():
tmp = master_d[k].values()[0]
while not isinstance(tmp,list):
tmp = tmp.values()[0]
tmp.append(d) # ends up appending to the wrong nested list
else:
master_d[k] = v
for k, v in master_d.iteritems():
print k, v
"""
Expecting:
key1 {'key2': {'my_list': [{'mykey': 'myval'}]}} # one d
key1 {'key2': {'key3': {'my_list': [{'mykey': 'myval'}, {'mykey': 'myval'}]}}} # two d's
key54 {'key6': {'key85': {'key86': {'my_list': [{'mykey': 'myval'}, {'mykey': 'myval'}]}}}} # two d's
key103 {'key508': {'key2': {'my_list': [{'mykey': 'myval'}]}}} # one d
"""
"""
Got:
key1 {'key2': {'key3': {'my_list': [{'mykey': 'myval'}, {'mykey': 'myval'}, {'mykey': 'myval'}]}}}
key103 {'key508': {'key2': {'my_list': [{'mykey': 'myval'}]}}}
key54 {'key6': {'key85': {'key86': {'my_list': [{'mykey': 'myval'}, {'mykey': 'myval'}]}}}}
"""
我想这正是你想要的。对于每一条路径,向前潜入主路径,并在需要的地方动态创建内容(使用
setdefault
):由非常有用的
pprint
生成的输出:相关问题 更多 >
编程相关推荐