Bra*_*ano 8 python dictionary list
我有三个列表:
z1 = ['A', 'A', 'B', 'B']
z2 = ['k1', 'k2', 'k1', 'k2']
z3 = ['v1', 'v2', 'v3', 'v4']
Run Code Online (Sandbox Code Playgroud)
当我写:
print(dict(zip(z2, z3)))
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
{'k2': 'v4', 'k1': 'v3'}
Run Code Online (Sandbox Code Playgroud)
我希望这个:
{'A':{'k1': 'v1', 'k2': 'v2'} , 'B':{'k1': 'v3', 'k2': 'v4'}}
Run Code Online (Sandbox Code Playgroud)
你能告诉我怎样才能得到预期的结果?
Roa*_*ner 11
该函数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'}})
Run Code Online (Sandbox Code Playgroud)
上面的工作原理是因为defaultdict(dict)为不存在的键初始化字典.它为您处理键的字典创建.
此外,如果您将最终结果包装为dict:
print(dict(d))
# {'A': {'k1': 'v1', 'k2': 'v2'}, 'B': {'k1': 'v3', 'k2': 'v4'}}
Run Code Online (Sandbox Code Playgroud)
注意: defaultdict它只是一个子类dict,因此您可以将其视为普通字典.
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |