我有两个列表,列表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':[]}
答案 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':[]}