首页 > 解决方案 > 在字典中插入相同的字符串值(作为键)

问题描述

我正在用 Django 编写 python 代码。我遇到了一个问题,其中我有三个可选字段:

Contact Name             Contact Number                     Contact Email
Ram                       9888812345                       *Blank*(Meaning not present)
Ram                       9888812345                        ram@gmail.com
Shyam                     8776532211                        shyam@hotmail.com

为此,我编写了如下代码:

df = csv.DictReader(open(uploaded_file_path), delimiter='\t')
contact_validation = {}
for row in df:
    if not row['Contact Name']:
       row['Contact Name'] = 'Name'
    if not row['Contact Number']:
       row['Contact Number'] = 'Number'
    if not row['Contact Email']:
       row['Contact Email'] = 'Email'     
    if (row['Contact Name']+ "-" + row['Contact Number']+ "-" + row['Contact Email']) not in contact_validation.keys():                        
       contact_validation[(row['Contact Name']+ "-" + row['Contact Number']+ "-" + row['Contact Email']).strip()] = []
       contact_validation[(row['Contact Name']+ "-" + row['Contact Number']+ "-" + row['Contact Email']).strip()].append(row['Name'])
    else:
       contact_validation[(row['Contact Name']+ "-" + row['Contact Number']+ "-" + row['Contact Email']).strip()].append(row['Name'])

为此,目前我的输出如下:

{'Ram-9888812345-Email': ['CRM_TestVenue_26_March_23'],
 'Ram-9888812345-ram@gmail.com': ['CRM_TestVenue_26_March_2']
 'Shyam-8776532211-shyam@hotmail.com':[Test2]}

但我要求输出如下:

{'Ram-9888812345-ram@gmail.com': ['CRM_TestVenue_26_March_23','CRM_TestVenue_26_March_2'],
'Shyam-8776532211-shyam@hotmail.com':[Test2]}

谁能建议一些代码或建议。?有什么需要改变或改进的?

标签: pythondjangodictionarydjango-rest-framework

解决方案


听起来您想要组合相互补充的行。也就是说,他们有相同的联系人姓名,但不是重复的号码或电子邮件。您没有包含执行此操作的代码。

因为看起来你无论如何都在使用熊猫,你可以做类似的事情

contacts_missing_info = df.loc[((df['Contact Number'].isna()) | (df['Contact Email'].isna()))]

并使用类似的代码来获取不丢失信息的联系人,然后将缺少信息的联系人组合在一起,然后附加两个数据框并以这种方式工作。


编辑:即使你没有使用熊猫,想法是一样的。遍历您的对象并确保按照您想要的方式组合所有重复项,然后执行您的代码。


推荐阅读