Вставка одинаковых значений строки (в качестве ключа) в словарь - PullRequest
0 голосов
/ 27 марта 2020

Я писал код python в Django. Я столкнулся с проблемой, в которой у меня есть три поля, которые являются необязательными:

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]}

Может кто-нибудь предложить какой-нибудь кусок кода или совет.? Что нужно изменить или улучшить?

1 Ответ

0 голосов
/ 27 марта 2020

Похоже, вы хотите объединить строки, которые дополняют друг друга. То есть там, где у них одно и то же имя контакта, но не дублирующийся номер или адрес электронной почты. Вы не включили код для этого.

Так как похоже, что вы все равно используете pandas, вы можете сделать что-то вроде

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

и использовать подобный код, чтобы контакты не пропустили информацию, а затем объедините те, которые вместе отсутствует информация, затем добавьте два кадра данных и работайте с ними таким образом.


Редактировать: Даже если вы не используете pandas, идея та же , Выполните итерацию по своему объекту и убедитесь, что все дубликаты объединены так, как вы хотите, а затем выполните свой код.

...