Найти нужное значение в словаре по одному ключу и отредактировать значение в другом ключе
у меня цикл 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']}}