python - 创建嵌套字典一层
问题描述
嗨,我有三个列表,我想用一行创建一个三层嵌套字典。
IE,
l1 = ['a','b']
l2 = ['1', '2', '3']
l3 = ['d','e']
我想创建以下嵌套字典:
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}}
我尝试使用 zip 执行外循环并添加列表,但元素被替换。即,这不起作用:
nd = {i:{j:{k:[]}} for i in zip(l1,l2,l3)}
解决方案
zip
不会在这里做。zip
连续遍历所有 3 个列表。您需要的是产品——实际上是 3 个嵌套循环。您可以以牺牲一些可读性为代价将其扁平化为单个字典理解。
>>> {i : {j : {k : 0 for k in l3} for j in l2} for i in l1}
{'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}}
}
或者,如果您想要最底层的单键字典列表(如您的 o/p 建议的那样),
>>> {i : {j : [{k : 0} for k in l3] for j in l2} for i in l1}
{'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}]}
}
推荐阅读
- c# - 不使用 Return 执行 FileContentResult
- javascript - 如何使用函数的输出更新输入字段的值?
- c# - C#中整数类型的溢出
- networking - Apache2 反向代理的问题
- unity3d - Unity3D 自定义检查器未正确保存值
- php - 如何将_token转移到laravel中的最后一个url
- android - 当应用程序在IOS后台时,如何在新的firebase消息(推送通知)上播放自定义铃声?
- c++ - 使用 input.get() 从 .txt 读取时输出额外值
- javascript - Javascript window.location.replace() 不重定向网页
- mips - 在 MIPS 中使用单点数创建二维数组