我有2个要创建字典的列表。
我的list1是:
[1,2,2,3]
我的list2是:
[['A','B'],['J','K'],[L'','M'],['W','X']]
我想做一个
dict(zip(list1,list2))
但是考虑到list1具有重复的键,我正在丢失一个键2及其值。
所以我想基于列表1中的重复值加入list2的子列表。
list1和list2的索引顺序相同。
所需的输出为:
[['A','B'],['J','K','L','M'],['W','X']]
所以我可以删除list1的副本并制作
dict(zip(list1_without_dups,list2_merged_sublists))
对不起,我没有尝试,但是我一直在寻找类似的问题而未能成功,并且不确定如何面对它。
答案 0 :(得分:4)
使用collections.defaultdict
:
from collections import defaultdict
lst1 = [1,2,2,3]
lst2 = [['A','B'],['J','K'],['L','M'],['W','X']]
d = defaultdict(list)
for x, y in zip(lst1, lst2):
d[x].extend(y)
print(d)
输出:
defaultdict(<class 'list'>, {1: ['A', 'B'], 2: ['J', 'K', 'L', 'M'], 3: ['W', 'X']})
您现在可以提取值以获得所需的列表。
答案 1 :(得分:0)
您可以使用itertools.groupby
:
from itertools import groupby as g, chain as c
d = [1,2,2,3]
new_d = [['A','B'],['J','K'],['L','M'],['W','X']]
r = [list(c(*[j for _, j in b])) for _, b in g(list(zip(d, new_d)), key=lambda x:x[0])]
输出:
[['A', 'B'], ['J', 'K', 'L', 'M'], ['W', 'X']]