Задать вопрос
@aqau123

Как совместить два словаря в питоне?

import json

dcitwitter = {
    'dotcominfoway.com': 
        {'twitter': 
            {
                'twitter-dotcominfoway.com-0.png': 
                    {
                        'content': 'A proper sales process\n\n#DotComInfoway #Sales #SalesTeam #BusinessDevelopmentProcess #SalesProcedure #Closure #Customers #B2B #SalesCycle #Marketing #B2BSales #SalesFunnel #SalesStrategy', 
                        'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\twitter-dotcominfoway.com-0.png', 
                        'date': None
                    }, 
                'twitter-dotcominfoway.com-1.png': 
                    {
                        'content': '2022 Image size specifications for different social media networks \n\n#DotComInfoway #ImageSize #SocialMediaMarketing #SMMagency #SocialMediaGuidelines #SocialMedia2022 #Facebook #Twitter #LinkedIn #Instagram', 
                        'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\twitter-dotcominfoway.com-1.png', 
                        'date': None
                    }, 
            }
        }
}

dciinst = {
    'dotcominfoway.com': 
        {
            'instagram': 
                {
                    'instagram-dotcominfoway.com-0.png': 
                        {
                            'content': 'dotcominfowaydciA proper sales process#DotComInfoway #Sales #SalesTeam #BusinessDevelopmentProcess #SalesProcedure #Closure #Customers #B2B #SalesCycle #Marketing #B2BSales #SalesFunnel #SalesStrategy22h', 
                            'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-0.png', 
                            'date': '12.02.2022'
                        }, 
                    'instagram-dotcominfoway.com-1.png': 
                        {
                            'content': 'dotcominfowaydci2022 Image size specifications for different social media networks #DotComInfoway #ImageSize #SocialMediaMarketing #SMMagency #SocialMediaGuidelines #SocialMedia2022 #Facebook #Twitter #LinkedIn #Instagram1d', 
                            'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-1.png', 
                            'date': '11.02.2022'
                        }
                }
        }
}

dcitwitter.update(dciinst)

print(
    json.dumps(
        dcitwitter,
        indent=4
    )
)

Вывод:
{
    "dotcominfoway.com": {
        "instagram": {
            "instagram-dotcominfoway.com-0.png": {
                "content": "dotcominfowaydciA proper sales process#DotComInfoway #Sales #SalesTeam #BusinessDevelopmentProcess #SalesProcedure #Closure #Customers #B2B #SalesCycle #Marketing #B2BSales #SalesFunnel #SalesStrategy22h",
                "fullPath": "C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-0.png",
                "date": "12.02.2022"
            },
            "instagram-dotcominfoway.com-1.png": {
                "content": "dotcominfowaydci2022 Image size specifications for different social media networks \ud83e\udd13#DotComInfoway #ImageSize #SocialMediaMarketing #SMMagency #SocialMediaGuidelines #SocialMedia2022 #Facebook #Twitter #LinkedIn #Instagram1d",
                "fullPath": "C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-1.png",
                "date": "11.02.2022"
            }
        }
    }
}

Есть двести проектов, по каждому из них скрипт парсит посты за последнюю неделю в твиттере, телеге, линкеде, фейсбуке и инсте(контент и скрин поста). В итоге у меня получается много словарей, мне их нужно превратить в один.
Мне нужно, чтоб ключи не перезаписывались, как это можно сделать?
  • Вопрос задан
  • 71 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@aqau123 Автор вопроса
В общем, поискав в гугле, какого-то красивого решения не нашел - написал свое.
dcitwitter = {
    'dotcominfoway.com': 
        {'twitter': 
            {
                'twitter-dotcominfoway.com-0.png': 
                    {
                        'content': 'A proper sales process\n\n#DotComInfoway #Sales #SalesTeam #BusinessDevelopmentProcess #SalesProcedure #Closure #Customers #B2B #SalesCycle #Marketing #B2BSales #SalesFunnel #SalesStrategy', 
                        'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\twitter-dotcominfoway.com-0.png', 
                        'date': None
                    }, 
                'twitter-dotcominfoway.com-1.png': 
                    {
                        'content': '2022 Image size specifications for different social media networks \n\n#DotComInfoway #ImageSize #SocialMediaMarketing #SMMagency #SocialMediaGuidelines #SocialMedia2022 #Facebook #Twitter #LinkedIn #Instagram', 
                        'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\twitter-dotcominfoway.com-1.png', 
                        'date': None
                    }, 
            }
        }
}

dciinst = {
    'dotcominfoway.com': 
        {
            'instagram': 
                {
                    'instagram-dotcominfoway.com-0.png': 
                        {
                            'content': 'dotcominfowaydciA proper sales process#DotComInfoway #Sales #SalesTeam #BusinessDevelopmentProcess #SalesProcedure #Closure #Customers #B2B #SalesCycle #Marketing #B2BSales #SalesFunnel #SalesStrategy22h', 
                            'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-0.png', 
                            'date': '12.02.2022'
                        }, 
                    'instagram-dotcominfoway.com-1.png': 
                        {
                            'content': 'dotcominfowaydci2022 Image size specifications for different social media networks #DotComInfoway #ImageSize #SocialMediaMarketing #SMMagency #SocialMediaGuidelines #SocialMedia2022 #Facebook #Twitter #LinkedIn #Instagram1d', 
                            'fullPath': 'C:\\Users\\Ilya\\Desktop\\Programming\\Work\\FITTL\\screenshots\\instagram-dotcominfoway.com-1.png', 
                            'date': '11.02.2022'
                        }
                }
        }
}

amazix = {
    'amazix.com': 
        {'telegram': 
            {0: 
                {'content': 'Самолет украинской авиакомпании SkyUp, летевший в Киев из Португалии, не пустили в воздушное пространство Украины, ему пришлось сесть в Кишиневе. Для всех 175 пассажиров организован трансфер в Киев.\n\nhttps://skyup.aero/ru/news/komentar-skyup-shodo-posadki-rejsa-pq0902-v-kishinevi_419\n\nДепутат Верховной рады Алексей Гончаренко сообщил, что "скорее всего с завтрашнего дня с 16:00 по Киеву воздушное движение в Украине будет приостановлено". \n\nhttps://t.me/oleksiihoncharenko/10169\n\nНакануне об остановке полетов на Украину сообщила нидерландская авиакомпания KLM. Голландские власти присвоили Украине красный уровень опасности.\n\nhttps://www.telegraaf.nl/nieuws/60600772/klm-stopt-met-vliegen-op-oekraine\n\nЕсли верить газете Politico, на этой неделе президент США Джо Байден сообщил союзникам, что Россия может вторгнуться на Украину 16 февраля. Российская сторона утверждает, что не собирается ни на кого нападать, и объясняет скопление войск у границы учениями. Тем не менее власти нескольких десятков стран рекомендовали своим гражданам покинуть Украину.', 
                'date': '13.02.2022'}, 
            1: {'content': 'России "насрать на санкции Запада". Такое заявление сделал посол России в Швеции    Виктор Татаринцев.\n\nhttps://www.aftonbladet.se/nyheter/a/RrnBR5/ryssland-kan-inte-acceptera-att-sverige-gar-med-i-nato', 
                'date': '13.02.2022'},
            }}}

def merge(companyDicts: List[dict], baseKeys: List[str], socialMedias: List[str]):
    data = {}

    for key in baseKeys:
        data[key] = {}

    for arg in companyDicts:
        for socialMedia in socialMedias:
            for key in baseKeys:
                try:
                    arg[key][socialMedia]       
                except KeyError:
                    continue
                data[key][socialMedia] = arg[key][socialMedia]

    return data

print(
    json.dumps(
        merge([dcitwitter, dciinst, amazix], baseKeys=['dotcominfoway.com', 'amazix.com'], socialMedias=['instagram', 'twitter', 'telegram', 'facebook']),
        indent=4
    )
)

При желании, можно этот код заменить под ваши нужды, думаю основная суть понятна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Мне нужно, чтоб ключи не перезаписывались

А как вы пользоваться словарем будете потом?

Вот есть теоретический словарь с одинаковыми ключами
d = {'key': 'value1', 'key': 'value2'}
а дальше что? Как получить value2? Ключи всегда должны быть уникальными, и они будут перезаписываться

Оформите эти словари в какой нибудь список, в зависимости от задачи
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы