Добавьте тот же ключ и значения, пока для l oop в python словаре - PullRequest
2 голосов
/ 02 марта 2020

Я - python новичок, и я работаю над небольшим проектом, но я не могу получить требуемый результат.

Это входное значение, которое у меня есть, я должен хранить только письма и связать их с проектом без дублированных значений. Это моя запись:

my_dictionnary = [
    {
        "email": ["email1", "email2"],
        "project":"projet1",
        "project_name":"Project1"
    },
    {
        "email": ["email1", "email2"],
        "project":"projet2",
        "project_name":"Project2"

    },
    {
        "email": ["email2"],
        "project":"projet3",
        "project_name":"Project3"

    }
]

Я хотел бы создать вывод следующим образом:

my_dictionnary_parsed = {
    "email2": ["projet1", "projet2", "projet3"],
    "email1": ["projet1", "projet2"]
}

У меня есть следующая функция:

def formating_email(list_of_email):
    dictionnary={}
        for email_data in list_of_email_data:
            for cp in email_data['cp_related']:
                print(cp,email_data['ticket_related_project'])
                dictionnary[cp] = email_data

Но значения продолжай переопределять ...

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Вы можете использовать defaultdict

from collections import defaultdict

new_dict=defaultdict(list)

for d in my_dictionnary:
    proj_name=d['project']
    for email in d['email']:
        new_dict['email'].append(proj_name)

defaultdict(list,
            {'email1': ['projet1', 'projet2'],
             'email2': ['projet1', 'projet2', 'projet3']})
1 голос
/ 02 марта 2020

Предполагая, что у вас правильная структура словаря, поскольку текущая неверна, вы прямо устанавливаете dictionnary[cp] = email_data. Вместо этого вы должны добавить, потому что это список.

Кроме того, не называйте ваши переменные как dictionnary. Дайте им несколько допустимых имен, которые соответствуют их функциональности, например projects_per_email или что-нибудь еще.

def formating_email(list_of_email):
    dictionnary={}
        for email_data in list_of_email_data:
            for cp in email_data['cp_related']:
                print(cp,email_data['ticket_related_project'])
                if dictionnary.get(cp) == None:
                    dictionnary[cp] = [email_data]
                else:
                    dictionnary[cp].append(email_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...