功能zip() https://docs.python.org/3/library/functions.html#zip可以接受两个以上的迭代。所以你可以使用zip(z1, z2, z3)
代替zip(z2, z3)
。但是,您仍然需要对项目进行分组,因为只需包装dict()
将不起作用,因为它无法处理 3 元组所需的嵌套字典。
为了正确地对项目进行分组,我会使用collections.defaultdict() https://docs.python.org/3/library/collections.html#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'}}
Note: defaultdict
只是一个子类dict
,所以你可以像普通字典一样对待它。