Попробуйте:
li_1 = ["a","a","a","b","b","c","c","c","a","a"]
li_2 = [{1,2,3},{5,6,9},{10},{11},{27,18,29},{1,2,3},{7,10},{34},{83},{60}]
di = { }
for ndx,i in enumerate(li_1):
if i in di:
di[i].extend(list(li_2[ndx]))
else:
di[i] = list(li_2[ndx])
print(di)
Выходы:
{'a': [1, 2, 3, 9, 5, 6, 10, 83, 60], 'b': [11, 18, 27, 29], 'c': [1, 2, 3, 10, 7, 34]}
Чтобы уменьшить количество строк, вы можете использовать defaultdict из python модуль сбора . Используя это, мы можем избежать предложения if
в for for l oop.
from collections import defaultdict
li_1 = ["a","a","a","b","b","c","c","c","a","a"]
li_2 = [{1,2,3},{5,6,9},{10},{11},{27,18,29},{1,2,3},{7,10},{34},{83},{60}]
di = defaultdict(list)
for ndx,i in enumerate(li_1):
di[i].extend(li_2[ndx])
print(dict(di))
Мой первый инстинкт был dict (zip (list_1, list_2)), который, очевидно, не сработал
dict(zip(list_1,list_2))
отбрасывает все, кроме последнего набора, связанного с ключом. Смотрите ниже код:
di = defaultdict(list)
for i,j in zip(li_1, li_2):
di[i].extend(j)
print(dict(di))