gpt4 book ai didi

python - 如何将三个列表压缩到一个嵌套的字典中

转载 作者:太空狗 更新时间:2023-10-29 20:40:15 24 4
gpt4 key购买 nike

我有三个列表:

z1 = ['A', 'A', 'B', 'B']
z2 = ['k1', 'k2', 'k1', 'k2']
z3 = ['v1', 'v2', 'v3', 'v4']

当我写的时候:

print(dict(zip(z2, z3)))

这是我的输出:

{'k2': 'v4', 'k1': 'v3'}

我希望这样:

{'A':{'k1': 'v1', 'k2': 'v2'} , 'B':{'k1': 'v3', 'k2': 'v4'}}

你能告诉我怎样才能得到我预期的结果吗?

最佳答案

函数zip()可以接受两个以上的迭代。所以你可以使用 zip(z1, z2, z3) 而不是 zip(z2, z3)。但是,您仍然需要对项目进行分组,因为简单地包装 dict() 将不起作用,因为它无法处理三元组所需的嵌套字典。

为了正确地对项目进行分组,我会使用 collections.defaultdict() :

from collections import defaultdict

z1 = ['A', 'A', 'B', 'B']
z2 = ['k1', 'k2', 'k1', 'k2']
z3 = ['v1', 'v2', 'v3', 'v4']

d = defaultdict(dict)
for x, y, z in zip(z1, z2, z3):
d[x][y] = z

print(d)
# defaultdict(<class 'dict'>, {'A': {'k1': 'v1', 'k2': 'v2'}, 'B': {'k1': 'v3', 'k2': 'v4'}})

上面的代码有效是因为 defaultdict(dict) 为不存在的键初始化了一个字典。它为您处理键的字典创建。

另外,如果你用 dict 包装最终结果:

print(dict(d))
# {'A': {'k1': 'v1', 'k2': 'v2'}, 'B': {'k1': 'v3', 'k2': 'v4'}}

注意 defaultdict 只是dict 的一个子类,所以你可以把它当作一个普通的字典来对待。

关于python - 如何将三个列表压缩到一个嵌套的字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com