我意识到这个问题的标题可能不会立即超级明确,所以在一个例子中: 我的dict包含如下列表(假设其中没有其他内容):
packed = {
'names': ['a', 'b', 'c', 'd'],
'values': ['A', 'B', 'C', 'D']
}
我想做的是并行迭代每个列表(尽可能多的列表),但是在每次迭代中我有一个dict,每个列表都有一个元素。我想象这样的事情:
for pack in smartIterate(packed): #how to "smartIterate"?
print(pack['names'], pack['values'])
#pack is equal to {'names':'a', 'values':'A'} in the first iteration
打印出来:
a, A
b, B
c, C
d, D
我意识到这可以通过显式迭代一个子列表的长度并在每次迭代期间构造一个dict来完成:
for i in range(len(packed.values()[0])):
pack = dict(zip(packed.keys(),[v[i] for v in packed.values()]))
但感觉有一种更干净,更有效 - pythonic - 这样做的方法。
类似的问题:
答案 0 :(得分:3)
您可以使用zip
dict.values
<强>实施例强>
packed = {
'names': ['a', 'b', 'c', 'd'],
'values': ['A', 'B', 'C', 'D']
}
keysValue = packed.keys()
for pack in zip(*packed.values()):
print( dict(zip(keysValue, pack)) )
<强>输出:强>
{'values': 'A', 'names': 'a'}
{'values': 'B', 'names': 'b'}
{'values': 'C', 'names': 'c'}
{'values': 'D', 'names': 'd'}
或使用列表理解
的一行keysValue = packed.keys()
print( [dict(zip(keysValue, pack)) for pack in zip(*packed.values())] )
#[{'values': 'A', 'names': 'a'}, {'values': 'B', 'names': 'b'}, {'values': 'C', 'names': 'c'}, {'values': 'D', 'names': 'd'}]