python - 如何将三个列表压缩到嵌套字典中
问题描述
我有三个列表:
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()
将不起作用,因为它无法处理 3 元组所需的嵌套字典。
要正确分组项目,我会使用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
,因此您可以将其视为普通字典。
推荐阅读
- typescript - TypeDoc 来自一个项目的一些文档
- cassandra - 添加一个新节点到 cassandra db 集群(目前只有一个节点)和超过 500GB 的数据
- c# - 集合中的排序值仅在循环中可见
- ios - Ios:如何对齐诸如whatsapp聊天消息标签和时间标签之类的标签?
- c# - 为什么它没有显示任何错误,也没有使用 C# 将数据插入 ms 访问文件?
- crystal-reports - 日期没有数据,将在 Crystal Reports 中显示零数据的日期
- ios - 如何在应用中打开 youtube 视频?
- rethinkdb - 重新考虑合并数组
- vba - VBA - 查找重复并比较其中哪一个是最高的
- python - 如何使用 python 将制表符限制的文本文件插入 sql 数据库?