Найти - Пользователи
Полная версия: Поэлементное сложение списков с вложенными словарями
Начало » Python для новичков » Поэлементное сложение списков с вложенными словарями
1
polin11
Есть 2 списка всегда из 5 элементов - словарей, значения которых тоже словарь например
 x = [{'2': {'1': 7}, '3':{'1':0, '5': 0}}, {}, {}, {}, {}]
y = [{'2': {'1': 1, '2': 5}}, {}, {}, {}, {}]
в итоге нужно сложить поэлементно два этих списка
Должно получиться
 x + y =   [{'2': {'1': 8, '2': 5}, '3':{'1':0, '5': 0}}, {}, {}, {}, {}]
начал писать запутался в циклах, просьба помочь
py.user.next
  
>>> def f1(lst1, lst2):
...     out = []
...     for i, j in zip(lst1, lst2):
...         out.append(f2(i, j))
...     return out
... 
>>> def f2(dct1, dct2):
...     out = {}
...     inter = set(dct1) & set(dct2)
...     xor = set(dct1) ^ set(dct2)
...     for i in inter:
...         out[i] = f3(dct1[i], dct2[i])
...     for i in xor:
...         if i in dct1:
...             out[i] = dct1[i]
...         else:
...             out[i] = dct2[i]
...     return out
... 
>>> def f3(dct1, dct2):
...     out = {}
...     inter = set(dct1) & set(dct2)
...     xor = set(dct1) ^ set(dct2)
...     for i in inter:
...         out[i] = dct1[i] + dct2[i]
...     for i in xor:
...         if i in dct1:
...             out[i] = dct1[i]
...         else:
...             out[i] = dct2[i]
...     return out
... 
>>> x = [{'2': {'1': 7}, '3':{'1':0, '5': 0}}, {}, {}, {}, {}]
>>> y = [{'2': {'1': 1, '2': 5}}, {}, {}, {}, {}]
>>> 
>>> out = f1(x, y)
>>> out
[{'2': {'1': 8, '2': 5}, '3': {'1': 0, '5': 0}}, {}, {}, {}, {}]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB