如何通过组合两个列表中的项目来创建字典?

时间:2015-11-27 01:55:54

标签: python list dictionary

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])

如何在循环中执行此操作?

2 个答案:

答案 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}}