Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2023 16:32:25

polin11
Зарегистрирован: 2013-05-02
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Поэлементное сложение списков с вложенными словарями

Есть 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}}, {}, {}, {}, {}]
начал писать запутался в циклах, просьба помочь

Отредактировано polin11 (Окт. 30, 2023 16:32:51)

Офлайн

#2 Окт. 30, 2023 19:00:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9844
Репутация: +  853  -
Профиль   Отправить e-mail  

Поэлементное сложение списков с вложенными словарями

  
>>> 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}}, {}, {}, {}, {}]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version