@MaratGan

Как из двух массивов сделать один?

Здравствуйте!

Есть два массива:

Первый
spoiler

[{'id': 14, 'alias': 'maks', 'name': 'Макс', 'disabled': False},
{'id': 4, 'alias': 'rgs', 'name': 'Росгосcтрах', 'disabled': False},
{'id': 12, 'alias': 'vsk', 'name': 'ВСК', 'disabled': False},
{'id': 9, 'alias': 'soglasie', 'name': 'Согласие', 'disabled': False},
{'id': 3, 'alias': 'renins', 'name': 'Ренессанс', 'disabled': False},
{'id': 2, 'alias': 'ingos', 'name': 'Ингосстрах', 'disabled': False},
{'id': 7, 'alias': 'tinkoff', 'name': 'Тинькофф', 'disabled': False},
{'id': 13, 'alias': 'mafin', 'name': 'Mafin', 'disabled': False},
{'id': 8, 'alias': 'ugsk', 'name': 'Югория', 'disabled': False},
{'id': 1, 'alias': 'zetta', 'name': 'Зетта', 'disabled': False},
{'id': 0, 'alias': 'alfa', 'name': 'Альфа', 'disabled': False, 'retentionType': 1},
{'id': 17, 'alias': 'osk', 'name': 'ОСК', 'disabled': False},
{'id': 15, 'alias': 'absolute', 'name': 'Абсолют Страхование', 'disabled': False},
{'id': 16, 'alias': 'euroins', 'name': 'ЕВРОИНС', 'disabled': False},
{'id': 5, 'alias': 'sds', 'name': 'СДС', 'disabled': True},
{'id': 18, 'alias': 'guidehins', 'name': 'Гайде', 'disabled': False},
{'id': 19, 'alias': 'astrovolga', 'name': 'Астро-Волга', 'disabled': False},
{'id': 11, 'alias': 'reso', 'name': 'РЕСО', 'disabled': True, 'retentionType': 1},
{'id': 6, 'alias': 'sngi', 'name': 'Сургутнефтегаз', 'disabled': True},
{'id': 10, 'alias': 'svrezv', 'name': 'Сервис резерв', 'disabled': True}]


Второй
spoiler

[{'company': 0, 'base': 4390, 'price': 3817.32},
{'company': 1, 'base': 4118, 'price': 3580.81},
{'company': 2, 'base': 4560, 'price': 3965.15},
{'company': 3, 'base': 4430, 'price': 3852.11},
{'company': 4, 'base': 4550, 'price': 3956.45},
{'company': 5, 'base': 4000, 'price': 3478.2},
{'company': 6, 'base': 4000, 'price': 3478.2},
{'company': 7, 'base': 4250, 'price': 3695.59},
{'company': 8, 'base': 4000, 'price': 3478.2},
{'company': 9, 'base': 4430, 'price': 3852.11},
{'company': 10, 'base': 4000, 'price': 3478.2},
{'company': 11, 'base': 4118, 'price': 3580.81},
{'company': 12, 'base': 4250, 'price': 3695.59},
{'company': 13, 'base': 4000, 'price': 3478.2},
{'company': 14, 'base': 4000, 'price': 3478.2},
{'company': 15, 'base': 4000, 'price': 3478.2},
{'company': 16, 'base': 4000, 'price': 3478.2},
{'company': 17, 'base': 4000, 'price': 3478.2},
{'company': 18, 'base': 4000, 'price': 3478.2},
{'company': 19, 'base': 4000, 'price': 3478.2}]


значение 'id' первого массива = значение 'company' второго массива
Как объединить, чтобы получился вот такой результат:

[{'company': 0, 'base': 4390, 'price': 3817.32, 'name': 'Альфа', 'disabled': False, 'retentionType': 1},
{'company': 1, 'base': 4118, 'price': 3580.81, 'name': 'Ингосстрах', 'disabled': False},
{'company': 2, 'base': 4560, 'price': 3965.15, 'name': 'Ингосстрах', 'disabled': False},
{'company': 3, 'base': 4430, 'price': 3852.11, 'name': 'Ренессанс', 'disabled': False},
{'company': 4, 'base': 4550, 'price': 3956.45', 'name': 'Росгосcтрах', 'disabled': False},
{'company': 5, 'base': 4000, 'price': 3478.2, 'name': 'СДС', 'disabled': True},
{'company': 6, 'base': 4000, 'price': 3478.2, 'name': 'Сургутнефтегаз', 'disabled': True},
{'company': 7, 'base': 4250, 'price': 3695.59, 'name': 'Тинькофф', 'disabled': False},
{'company': 8, 'base': 4000, 'price': 3478.2, 'name': 'Югория', 'disabled': False},
{'company': 9, 'base': 4430, 'price': 3852.11, 'name': 'Согласие', 'disabled': False},
{'company': 10, 'base': 4000, 'price': 3478.2, 'name': 'Сервис резерв', 'disabled': True},
{'company': 11, 'base': 4118, 'price': 3580.81, 'name': 'РЕСО', 'disabled': True, 'retentionType': 1},
{'company': 12, 'base': 4250, 'price': 3695.59, 'name': 'ВСК', 'disabled': False},
{'company': 13, 'base': 4000, 'price': 3478.2, 'name': 'Mafin', 'disabled': False},
{'company': 14, 'base': 4000, 'price': 3478.2, 'name': 'Макс', 'disabled': False},
{'company': 15, 'base': 4000, 'price': 3478.2, 'name': 'Абсолют Страхование', 'disabled': False},
{'company': 16, 'base': 4000, 'price': 3478.2, 'name': 'ЕВРОИНС', 'disabled': False},
{'company': 17, 'base': 4000, 'price': 3478.2, 'name': 'ОСК', 'disabled': False},
{'company': 18, 'base': 4000, 'price': 3478.2, 'name': 'Гайде', 'disabled': False},
{'company': 19, 'base': 4000, 'price': 3478.2, 'name': 'Астро-Волга', 'disabled': False}]
  • Вопрос задан
  • 148 просмотров
Решения вопроса 3
0xD34F
@0xD34F
companiesDict = { n['id']: { k: n[k] for k in ('name', 'disabled') } for n in arr1 }
arr3 = [ { **n, **companiesDict.get(n['company'], {}) } for n in arr2 ]
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Что-то все какие-то сложно перевариваемые решения постят.
Вот же понятно все и читабельно:
full = {company['id']: company for company in first_list}
for extra in second_list:
    item = full.setdefault(extra['company'], {})
    item.update(extra)
    item.pop('id', None)
    item.pop('alias', None)

result = list(full.values())
Ответ написан
Комментировать
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
merged_list = list()
for f in list_1:
    for b in list_2:
        if f['id'] == b['company']:
            item = {
                'company': b['company'],
                'base': b['base'],
                'price': b['price'],
                'name': f['name'],
                'disabled': f['disabled']
            }
            if f.get('retentionType', False):
                item['retentionType'] = f['retentionType']
            merged_list.append(item)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
С учётом отсортированного второго списка и ненужности id
for item in list1:
    index = item.pop('id')
    list2[index].update(item)
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
двумя for циклами , проверкой и присваиванием

или Пандой или lists comprehentions , если надо быстрее
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы