我试图获得一个获取3个列表并将其转换为嵌套字典的方法。
第一个和第二个列表可以包含任意数量的条目> 0。
值列表始终包含len(firstlist) * len(secondlist)
个条目。
例如:
givenlist1 = ["First", "Second"]
givenlist2 = ["A.B.D", "A.Y.Z", "A.B.E"]
Values = ["10", "2", "3", "4", "1", "3"]
应该返回这样的字典:
{'First': {'A': {'B': {'D': '10', 'E': '3'}, 'Y': {'Z': '2'}}},
'Second': {'A': {'B': {'D': '4', 'E': '3'}, 'Y': {'Z': '1'}}}}
我在.update
尝试了很多但是我不知道如何在第二个列表中使用可变数量的条目来做这件事。
答案 0 :(得分:1)
您可以使用itertools.product
获取givenlist1
和givenlist2
中所需条目的组合,并使用zip
将其与{{1}中的相应项相关联}}。然后,您需要values
.split
项中字母的单个字母键来获取嵌套键,并根据需要创建新的词组。
givenlist2
<强>输出强>
from itertools import product
from pprint import pprint
givenlist1 = ["First", "Second"]
givenlist2 = ["A.B.D", "A.Y.Z", "A.B.E"]
values = ["10", "2", "3", "4", "1", "3"]
result = {k1: {} for k1 in givenlist1}
for (k1, k2), v in zip(product(givenlist1, givenlist2), values):
d = result[k1]
keys = k2.split('.')
for k in keys[:-1]:
d = d.setdefault(k, {})
d[keys[-1]] = v
pprint(result)
这里是一个不那么紧凑但可能更易读的方式来编写内部{'First': {'A': {'B': {'D': '10', 'E': '3'}, 'Y': {'Z': '2'}}},
'Second': {'A': {'B': {'D': '4', 'E': '3'}, 'Y': {'Z': '1'}}}}
循环:
for