Возможно преобразовать ваши данные в другую, более удобную структуру данных.
Например, вместо listone
было бы проще работать с одним диктовкой, подобной этой:
{('unit1', 'test1'): 10,
('unit2', 'test1'): 78,
('unit2', 'test2'): 2,
('unit1', 'test2'): 45}
Так дано,
import itertools
units = ['unit1', 'unit2']
testnames = ['test1','test2']
listone = [{'unit1': {'test1': 10}},
{'unit1': {'test2': 45}},
{'unit2': {'test1': 78}},
{'unit2': {'test2': 2}}]
listtwo = [{'unit1': {'test1': 56}},
{'unit1': {'test2': 34}},
{'unit2': {'test1': 23}},
{'unit2': {'test2': 5}}]
Здесь мы конвертируем listone
и listtwo
в список диктов:
dicts=[{},{}]
for i,alist in enumerate([listone,listtwo]):
for item in alist:
for unit,testdict in item.iteritems():
for testname,value in testdict.iteritems():
dicts[i][unit,testname]=value
Теперь найти deltas
легко:
for unit,testname in itertools.product(units,testnames):
delta=dicts[1][unit,testname]-dicts[0][unit,testname]
print('{u}, {t}, {d}'.format(u=unit,t=testname,d=delta))
выходы
unit1, test1, 46
unit1, test2, -11
unit2, test1, -55
unit2, test2, 3