Добавить значения во вложенные словари внутри вложенных списков - PullRequest
0 голосов
/ 17 октября 2019

У меня есть список, который содержит списки. Эти списки содержат словари, и эти словари содержат сами словари (Список -> Списки -> словари -> словари).

Данные выглядят так (только небольшая часть, у меня есть не только 3, как здесь, но 1500 изсписки «второго уровня», которые обычно содержат около 5-15 словарей, которые содержат (всегда) 14 словарей; кроме того, словари внутри списков не совпадают в разных списках, как здесь):

nest = [[{'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}],
     [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}],
     [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}]]

Iесть второй список, который имеет ту же длину, что и мой список (3 в этом примере, но 1500 в моих данных).

val = [100, 200, 300]

Я хочу добавить значения из этого списка (val) во вложенные словари. Таким образом, первое значение второго списка должно появляться в каждом подкатегории первого списка, второе значение второго списка должно появляться в каждом подкатегории второго списка и т. Д.

В основном это должно выглядеть так вend:

nest = [[{'Dict11': {1: 'A1', 2: 'A2', 3:'A3', 'id': 100},  
    'Dict12': {4: 'B1', 5: 'B2', 6:'B3', 'id': 100},
    'Dict13': {7: 'C1', 8: 'C2', 9:'C3', 'id': 100}},
  { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3', 'id': 100},  
    'Dict22': {4: 'B1', 5: 'B2', 6:'B3', 'id': 100},
    'Dict23': {7: 'C1', 8: 'C2', 9:'C3', 'id': 100}},
  { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3', 'id': 100},  
    'Dict32': {4: 'B1', 5: 'B2', 6:'B3', 'id': 100},
    'Dict33': {7: 'C1', 8: 'C2', 9:'C3', 'id': 100}}],
 [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3', 'id': 200},  
    'Dict12': {4: 'B1', 5: 'B2', 6:'B3', 'id': 200},
    'Dict13': {7: 'C1', 8: 'C2', 9:'C3', 'id': 200}},
  { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3', 'id': 200},  
    'Dict22': {4: 'B1', 5: 'B2', 6:'B3', 'id': 200},
    'Dict23': {7: 'C1', 8: 'C2', 9:'C3', 'id': 200}},
  { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3', 'id': 200},  
    'Dict32': {4: 'B1', 5: 'B2', 6:'B3', 'id': 200},
    'Dict33': {7: 'C1', 8: 'C2', 9:'C3', 'id': 200}}],
 [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3', 'id': 300},  
    'Dict12': {4: 'B1', 5: 'B2', 6:'B3', 'id': 300},
    'Dict13': {7: 'C1', 8: 'C2', 9:'C3', 'id': 300}},
  { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3', 'id': 300},  
    'Dict22': {4: 'B1', 5: 'B2', 6:'B3', 'id': 300},
    'Dict23': {7: 'C1', 8: 'C2', 9:'C3', 'id': 300}},
  { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3', 'id': 300},  
    'Dict32': {4: 'B1', 5: 'B2', 6:'B3', 'id': 300},
    'Dict33': {7: 'C1', 8: 'C2', 9:'C3', 'id': 300}}]]

Я пытался

for sublist in nest:
sublist.append(val)

, но это явно не сработало так, как я хотел.

Как добавить значения из второго списка ввложенные словари вложенных списков? Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать понимание списка с zip:

val = [100, 200, 300]
nest = [[{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict12': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict13': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict22': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict23': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict31': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict32': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict33': {7: 'C1', 8: 'C2', 9: 'C3'}}], [{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict12': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict13': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict22': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict23': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict31': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict32': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict33': {7: 'C1', 8: 'C2', 9: 'C3'}}], [{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict12': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict13': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict22': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict23': {7: 'C1', 8: 'C2', 9: 'C3'}}, {'Dict31': {1: 'A1', 2: 'A2', 3: 'A3'}, 'Dict32': {4: 'B1', 5: 'B2', 6: 'B3'}, 'Dict33': {7: 'C1', 8: 'C2', 9: 'C3'}}]]
new_nest = [[{c:{**d, 'id':a} for c, d in i.items()} for i in b] for a, b in zip(val, nest)]

Вывод:

[[{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 100}, 
  'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 100}, 
  'Dict13': {7: 'C1', 8: 'C2', 9: 'C3', 'id': 100}}, 
  {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 100}, 
  ...]
 [{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 200}, 
  'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 200}, 
  'Dict13': {7: 'C1', 8: 'C2', 9: 'C3', 'id': 200}}, 
  {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 200}, 
   'Dict22': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 200}, 
  ...]
 [{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 300}, 
   'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 300}, 
   'Dict13': {7: 'C1', 8: 'C2', 9: 'C3', 'id': 300}}, 
    {'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 300}, 
   'Dict22': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 300},
  ....}]]
1 голос
/ 17 октября 2019

Это решение манипулирует самим «гнездом» и поэтому должно быть очень производительным и не требует больше места при необходимости.

nest = [[{'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}],
     [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}],
     [{ 'Dict11': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict12': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict13': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict21': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict22': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict23': {7: 'C1', 8: 'C2', 9:'C3'}},
      { 'Dict31': {1: 'A1', 2: 'A2', 3:'A3'},  
        'Dict32': {4: 'B1', 5: 'B2', 6:'B3'},
        'Dict33': {7: 'C1', 8: 'C2', 9:'C3'}}]]

val = [100, 200, 300]

for i in range(0, len(nest)):
    for y in nest[i]:
        for value in y.values():
            value['id'] = val[i]

print(nest)
# Result:
[[
{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 100},
'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 100},
'Dict13': {8: 'C2', 9: 'C3', 'id': 100, 7: 'C1'}},
{'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 100},
'Dict22': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 100},
'Dict23': {8: 'C2', 9: 'C3', 'id': 100, 7: 'C1'}},
{'Dict31': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 100},
'Dict33': {8: 'C2', 9: 'C3', 'id': 100, 7: 'C1'},
'Dict32': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 100}}],
[{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 200},
'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 200},
'Dict13': {8: 'C2', 9: 'C3', 'id': 200, 7: 'C1'}},
{'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 200},
'Dict22': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 200},
'Dict23': {8: 'C2', 9: 'C3', 'id': 200, 7: 'C1'}},
{'Dict31': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 200},
'Dict33': {8: 'C2', 9: 'C3', 'id': 200, 7: 'C1'},
'Dict32': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 200}}],
[{'Dict11': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 300},
'Dict12': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 300},
'Dict13': {8: 'C2', 9: 'C3', 'id': 300, 7: 'C1'}},
{'Dict21': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 300},
'Dict22': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 300},
'Dict23': {8: 'C2', 9: 'C3', 'id': 300, 7: 'C1'}},
{'Dict31': {1: 'A1', 2: 'A2', 3: 'A3', 'id': 300},
'Dict33': {8: 'C2', 9: 'C3', 'id': 300, 7: 'C1'},
'Dict32': {4: 'B1', 5: 'B2', 6: 'B3', 'id': 300}}
]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...