如何将两个列表统一合并为字典

时间:2019-06-05 06:34:32

标签: python

我有两个列表,列表1和列表2。我想创建一个字典,其中list1是键,而list2在它们之间平均分配。我不在乎list2中的哪个元素与list1相关联。我只在乎它们会均匀散布。

例如:

list1 = ['a','b','c']
list2 = [1,2,3,4,5,6,7,8]
result = {'a':[1,2,3], 'b':[4,5,6], 'c':[7,8]}

我考虑过要进行以下列表理解:

num_list2_per_list1 = len(list2)//len(list1)
result_dict = { list1_member : list2[idx*num_list2_per_list1 : (1+idx)*num_list2_per_list1] for idx, list1_member in enumerate(list1) }

但是,如果len(list2)

例如:

list1 = ['a','b','c']
list2 = [1,2]
result = {'a':[1], 'b':[2], 'c':[]}

2 个答案:

答案 0 :(得分:3)

这是一种方法。

使用enumerate

例如:

list1 = ['a','b','c']
list2 = [1,2,3,4,5,6,7,8]
l = len(list1)
result = {}
for i, v in enumerate(range(0, len(list2), l)):
    result[list1[i]] = list2[v: v+l]
print(result)

使用zip

for key, v in zip(list1, range(0, len(list2), l)):
    result[key] = list2[v: v+l]

输出:

{'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [7, 8]}

根据评论进行编辑

from itertools import zip_longest  #python2 izip_longest
list1 = ['a','b','c']
list2 = [1,2]

result = {}
if len(list1) > len(list2):
    for key, value in zip_longest(list1, list2, fillvalue=[]):
        result[key] = value
else:
    l = len(list1)
    for key, v in zip(list1, range(0, len(list2), l)):
        result[key] = list2[v: v+l]
print(result)

答案 1 :(得分:0)

如果按以下方式更改num_list2_per_list1,则结果将正确

num_list2_per_list1 = (len(list2) + len(list1)-1 )//len(list1)
result_dict = { list1_member : list2[idx*num_list2_per_list1 : (1+idx)*num_list2_per_list1] for idx, list1_member in enumerate(list1) }

测试运行:

list1 = ['a','b','c']
list2 = [1,2,3,4,5,6,7,8,9]
result = {'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]}

list1 = ['a','b','c']
list2 = [1,2,3,4,5,6,7,8]
result = {'a':[1,2,3], 'b':[4,5,6], 'c':[7,8]}

list1 = ['a','b','c']
list2 = [1,2]
result = {'a':[1], 'b':[2], 'c':[]}