Найти нужное значение в словаре по одному ключу и отредактировать значение в другом ключе

у меня цикл for проходится по json и заполняет словарь


{'name': 'имя1', 'id': '378', 'number': ['+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9', '+10', '+11', '+12']}
{'name': 'имя2', 'id': '18', 'number': ['+2', '+3', '+4', '+5', '+6', '+7', '+8']}
{'name': 'имя2', 'id': '18', 'number': ['+8', '+9', '+10', '+11', '+12']}
{'name': 'имя3', 'id': '428', 'number': ['+2', '+3', '+4', '+5']}

Если id и имя одинаковые, то склеиваем number Мне подсказали тут конструкцию. Склеиваем? Должно выйти так

{'name': 'имя2', 'id': '18', 'number': ['+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9', '+10', '+11', '+12']}

Но как сделать не могу понять. Вот например цикл for проходится по json сверху вниз и заполняет словарь. Если он наткнулся на id который уже есть в словаре, нужно найти строку с этим id, склеить поле number убрав дубли и не записывать дубль

new_dict = {'name': '', 'id': '', 'number': []}
Затем 

for data in json_data['data']:
  id = int(data['attributes']['id'])
  number = data['attributes']['numbers']
  number_dict = {'number': number}

  if str(id) in new_dict['id']:
      new_dict['number'] = sorted(list(set(new_dict['number'] + number_dict['number'])), key=lambda x: int(x))
  else:
      new_dict['name'] = name
      new_dict['id'] = str(id)
      new_dict['number'] = number_dict['number']

Результат будет неверный. Короче я запутался и не могу пока понять как сделать это. Подскажите пожалуйста


Ответы (1 шт):

Автор решения: splash58
arr =[
    {'name': 'имя1', 'id': '378', 'number': ['+2', '+3', '+4', '+5', '+6', '+7', '+8', '+9', '+10', '+11', '+12']},
    {'name': 'имя2', 'id': '18', 'number': ['+2', '+3', '+4', '+5', '+6', '+7', '+8']},
    {'name': 'имя2', 'id': '18', 'number': ['+8', '+9', '+10', '+11', '+12']},
    {'name': 'имя3', 'id': '428', 'number': ['+2', '+3', '+4', '+5']}
]

new_dict = {}
for x in arr:
    if (x['id'],x['name']) in new_dict :
        new_dict[(x['id'],x['name'])]['number'] = sorted(list(set(new_dict[(x['id'],x['name'])]['number'] + x['number'])), key=lambda x: int(x)) 
    else:
        new_dict[(x['id'],x['name'])] = x

print(new_dict)    

{('18', 'имя2'): {'id': '18',
              'name': 'имя2',
              'number': ['+2','+3','+4','+5','+6','+7','+8','+9','+10','+11',+12']},
 ('378', 'имя1'): {'id': '378',
               'name': 'имя1',
               'number': ['+2','+3','+4','+5','+6','+7','+8','+9','+10','+11',+12']},
 ('428', 'имя3'): {'id': '428',
               'name': 'имя3',
               'number': ['+2', '+3', '+4', '+5']}}
→ Ссылка