key_list=['number','alpha']
value_list=[['1','a'],['2','b']]
我想收集这种模式中的元素:
dict = {}
dict.setdefault(key_list[0],[]).append(value_list[0][0])
dict.setdefault(key_list[0],[]).append(value_list[1][0])
dict.setdefault(key_list[1],[]).append(value_list[0][1])
dict.setdefault(key_list[1],[]).append(value_list[1][1])
如何在循环中执行此操作?
答案 0 :(得分:4)
您可以values_list
的{{1}}的价值zip
,然后使用key_list
>>> {k: v for k, v in zip(key_list, zip(*value_list))}
{'alpha': ('a', 'b'), 'number': ('1', '2')}
的结果,使用字典理解,就像这样
>>> list(zip(*value_list))
[('1', '2'), ('a', 'b')]
您可以像这样一步一步地理解这一点
zip
现在,key_list
ping >>> list(zip(key_list, zip(*value_list)))
[('number', ('1', '2')), ('alpha', ('a', 'b'))]
会给我们
dict
现在,您可以使用>>> dict(zip(key_list, zip(*value_list)))
{'alpha': ('a', 'b'), 'number': ('1', '2')}
函数创建字典,如mhawke所示,
key_list=['number','alpha']
value_list=[['1','a'],['2','b']]
d = dict(zip(key_list, zip(*value_list)))
print(d)
或使用字典理解,如上所示。
答案 1 :(得分:4)
zip
对于这类事情非常方便:
values_list
输出
{'alpha': ('a', 'b'), 'number': ('1', '2')}
基本上,这可以解压缩zip()
,以便将各个项(它们自己的列表)作为参数传递给key_list
内置函数。这具有收集数字和alpha的效果。然后用dict()
压缩该新列表以生成另一个列表。最后,通过在压缩列表上调用value_list
来创建字典。
请注意,此代码确实依赖于key_list=['number','alpha']
value_list=[['1','a'],['2','b']]
d = {k: list(v) for k, v in zip(key_list, zip(*value_list))}
>>> print(d)
{'alpha': ['a', 'b'], 'number': ['1', '2']}
中元素的顺序。它假定数值始终在alpha值之前。它还会生成元组而不是列表的字典。如果这是一个要求,那么使用字典理解(根据thefourtheye的答案)允许您在构建字典时将元组转换为列表:
{{1}}