zip
может перевести ваш список в [['str1',1,1],['str2',2,2],...]
, что может упростить итерации:
allValues = [['str1','str1','str1','str1','str1','str1','str1','str2','str2','str2','str2','str2'],
[1,2,3,4,5,6,7,8,9,10,11,12],
[1,2,3,4,5,6,7,8,9,10,11,12]]
D = {}
for k,v1,v2 in zip(*allValues):
if k in D:
D[k][0].append(v1)
D[k][1].append(v2)
else:
D[k] = [[v1],[v2]]
print D
Выход:
{'str2': [[8, 9, 10, 11, 12], [8, 9, 10, 11, 12]], 'str1': [[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]]}
Использование defaultdict
может еще больше упростить это:
from collections import defaultdict
allValues = [['str1','str1','str1','str1','str1','str1','str1','str2','str2','str2','str2','str2'],
[1,2,3,4,5,6,7,8,9,10,11,12],
[1,2,3,4,5,6,7,8,9,10,11,12]]
D = defaultdict(lambda:[[],[]])
for k,v1,v2 in zip(*allValues):
D[k][0].append(v1)
D[k][1].append(v2)
print D
print dict(D) # If you don't want the final type to be defaultdict.
Выход:
defaultdict(<function <lambda> at 0x00000000070A5128>, {'str2': [[8, 9, 10, 11, 12], [8, 9, 10, 11, 12]], 'str1': [[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]]})
{'str2': [[8, 9, 10, 11, 12], [8, 9, 10, 11, 12]], 'str1': [[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]]}