Вывести весь словарь с его именем и исходным форматированием

from pprint import pprint

site = {
    'html': {
        'head': {
            'title': 'Куплю/продам телефон недорого'
        },
        'body': {
            'h2': 'У нас самая низкая цена на iphone',
            'div': 'Купить',
            'p': 'продать'
        }
    }
}


def find_key(struct, key, meaning):
    if key in struct:
        struct[key] = meaning
        return site

    for sub_struct in struct.values():
        if isinstance(sub_struct, dict):
            result = find_key(sub_struct, key, meaning)
            if result:
                return site


number_sites = int(input('Сколько сайтов: '))
for _ in range(number_sites):
    product_name = input('Введите название продукта для нового сайта: ')
    key = {'title': f'Куплю/продам {product_name} недорого', 'h2': f'У нас самая низкая цена на {product_name}'}
    for i in key:
        find_key(site, i, key[i])

    print(f'Сайт для {product_name}:')
    pprint(site)

Результат выполнения кода нужно вывести в соответствии с ниже приложенным примером и данным форматированием вывода:

site = {
    'html': {
        'head': {
            'title': 'Куплю/продам телефон недорого'
        },
        'body': {
            'h2': 'У нас самая низкая цена на iphone',
            'div': 'Купить',
            'p': 'продать'
        }
    }
}

Json не катит, так как это статический кусок кода с которым нужно работать. Говорят как-то можно организовать с помощью рекурсии.


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

Автор решения: Namerek
from pprint import pprint

import io

site = {
    'html': {
        'head': {
            'title': 'Куплю/продам телефон недорого'
        },
        'body': {
            'h2': 'У нас самая низкая цена на iphone',
            'div': 'Купить',
            'p': 'продать'
        }
    }
}


def find_key(struct, key, meaning):
    if key in struct:
        struct[key] = meaning
        return site

    for sub_struct in struct.values():
        if isinstance(sub_struct, dict):
            result = find_key(sub_struct, key, meaning)
            if result:
                return site


number_sites = int(input('Сколько сайтов: '))
for _ in range(number_sites):
    product_name = input('Введите название продукта для нового сайта: ')
    key = {'title': f'Куплю/продам {product_name} недорого', 'h2': f'У нас самая низкая цена на {product_name}'}
    for i in key:
        find_key(site, i, key[i])

    print(f'Сайт для {product_name}:')


buf = io.StringIO()

pprint(site, stream=buf)

output = "site = " + buf.getvalue()

print(
    output
)

output:

site = {'html': {'body': {'div': 'Купить',
                   'h2': 'У нас самая низкая цена на InMySite',
                   'p': 'продать'},
          'head': {'title': 'Куплю/продам InMySite недорого'}}}

UPD:

data = json.dumps(
    site,
    ensure_ascii=False,
    indent=4
)
print(
    # следите чтобы в строковых значениях не попадались знаки двойных кавычек, 
    # а так же избегайте значений True, False, None
    "site = " + data.replace('"', "'")
)

site = {
    'html': {
        'head': {
            'title': 'Куплю/продам InMySite недорого'
        },
        'body': {
            'h2': 'У нас самая низкая цена на InMySite',
            'div': 'Купить',
            'p': 'продать'
        }
    }
}
→ Ссылка