在python字典中的for循环时添加相同的键和值

时间:2020-03-02 10:25:46

标签: python python-3.x list dictionary

我是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 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:1)

假设您具有正确的字典结构,因为当前的字典结构不正确,您将直接设置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)