嗨我有三个列表,我想用一行创建一个三级嵌套字典.
即
l1 = ['a','b']
l2 = ['1', '2', '3']
l3 = ['d','e']
Run Code Online (Sandbox Code Playgroud)
我想创建以下嵌套字典:
nd = {'a':{'1':{'d':0},{'e':0},'2':{'d':0},{'e':0},'3':{'d':0},{'e':0},'b':'a':{'1':{'d':0},{'e':0},'2':{'d':0},{'e':0},'3':{'d':0},{'e':0}}
Run Code Online (Sandbox Code Playgroud)
我尝试使用zip来执行外部循环并添加列表但元素被替换.即,这不起作用:
nd = {i:{j:{k:[]}} for i in zip(l1,l2,l3)}
Run Code Online (Sandbox Code Playgroud)
zip不会在这里做.zip连续迭代所有3个列表.你需要的是产品 - 有效的3个嵌套循环.您可以将其简化为单个词典理解,但需要考虑一些可读性.
>>> {i : {j : {k : 0 for k in l3} for j in l2} for i in l1}
Run Code Online (Sandbox Code Playgroud)
{'a': {'1': {'d': 0, 'e': 0},
'2': {'d': 0, 'e': 0},
'3': {'d': 0, 'e': 0}},
'b': {'1': {'d': 0, 'e': 0},
'2': {'d': 0, 'e': 0},
'3': {'d': 0, 'e': 0}}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要最底层的单键词典列表(如您的o/p建议的那样),
>>> {i : {j : [{k : 0} for k in l3] for j in l2} for i in l1}
Run Code Online (Sandbox Code Playgroud)
{'a': {'1': [{'d': 0}, {'e': 0}],
'2': [{'d': 0}, {'e': 0}],
'3': [{'d': 0}, {'e': 0}]},
'b': {'1': [{'d': 0}, {'e': 0}],
'2': [{'d': 0}, {'e': 0}],
'3': [{'d': 0}, {'e': 0}]}
}
Run Code Online (Sandbox Code Playgroud)