Собрать json из разных словарей(Python)

Как собрать json из таких вводных. Сейчас я получаю основные данные в формате словаря:

{'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}

И контактные данные в таком формате:

{'lastname_1': 'Петров', 'firstname_1': 'Иван', 'middelname_1': 'Сергеевич', 'phone_1': '79680949999', 'relation': '3'}

Контактные данные из группы contacts могут быть динамическими, то есть может быть больше или меньше контактов.

Пример, как должно получиться:

{
    external_id: '1234qwer', 
        external_meta: {
            amount: 44342,
            period: 33, 
            lastname: 'Иванов', 
            firstname: 'Иван', 
            middlename: 'Иванович',
            phone: '79998884444', 
            birthdate: '25.08.1999',
            city: 'Киев'
        },
    contacts: [{
        lastname: 'Петров',
        firstname: 'Иван', 
        middlename: 'Сергеевич', 
        phone: '79680949999',
        relation: 3, 
    }, {
        lastname: 'Бородач', 
        firstname: 'Елена', 
        middlename: 'Родионовна', 
        phone: '79034564444', 
        relation: 1, 
    }]
}

Второй дополнительный контакт(Бородач Елена Родионовна) необязательный, нужно сделать как-то проверку в цикле


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

Автор решения: nomnoms12

Для преобразования словаря в JSON можно воспользоваться функцией json.dumps.

Но перед этим нужно собрать его из двух других. Сделать это можно множеством способов. Например:

import json

data = {'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}
contact = {'lastname_1': 'Петров', 'firstname_1': 'Иван', 'middelname_1': 'Сергеевич', 'phone_1': '79680949999', 'relation': '3'}

external_meta = {
    'amount': data['amount'],
    'period': data['period'],
    'lastname': data['lastname'],
    'firstname': data['firstname'],
    'middlename': data['middelname'],
    'phone': data['phone'],
    'birthdate': data['birthdate'],
    'city': data['city'],
}

contacts = [{
    'lastname': contact['lastname_1'],
    'firstname': contact['firstname_1'],
    'middlename': contact['middelname_1'],
    'phone': contact['phone_1'],
    'relation': int(contact['relation']),
}]

result = json.dumps({
    'external_id': '1234qwer',
    'external_meta': external_meta,
    'contacts': contacts,
})

result:

{
    "external_id": "1234qwer",
    "external_meta": {
        "amount": 44342,
        "period": 33,
        "lastname": "Иванов",
        "firstname": "Иван",
        "middlename": "Иванович",
        "phone": "79998884444",
        "birthdate": "25.08.1999",
        "city": "Киев"
    },
    "contacts": [{
        "lastname": "Петров",
        "firstname": "Иван",
        "middlename": "Сергеевич",
        "phone": "79680949999",
        "relation": 3
    }]
}
→ Ссылка
Автор решения: solovey1

Пока придумал сделать так:

form = {'amount': 44342, 'period': 33, 'lastname': 'Иванов', 'firstname': 'Иван', 'middelname': 'Иванович', 'phone': '79998884444', 'birthdate': '25.08.1999', 'city': 'Киев'}
form2 = {'lastname': 'Петров', 'firstname': 'Иван', 'middelname': 'Сергеевич', 'phone': '79680949999', 'relation': 3}
form3 = {'lastname': '', 'firstname': '', 'middelname': '', 'phone': '', 'relation': ''}
form4 = {'lastname': '', 'firstname': '', 'middelname': '', 'phone': '', 'relation': ''}

request_data = {}
request_data['external_id'] = 325614
request_data['external_meta'] = {}
request_data['contacts'] = {}
request_data['external_meta'] = form_data

if form4_data['lastname'].isalpha() :
    request_data['contacts'] = form2_data, form3_data,form4_data
elif form3_data['lastname'].isalpha():
    request_data['contacts'] = form2_data, form3_data
else: 
    request_data['contacts'] = form2_data

request_json = json.dumps(request_data)
→ Ссылка