Как объединить два словаря с одинаковыми ключами без перезаписи данных?

#python #csv #dictionary

Вопрос:

У меня есть задание, в котором мне нужно взять два csv-файла и превратить содержащуюся в них информацию в два словаря. Ключи для обоих словарей одинаковы, мне просто нужно, чтобы информация из одного словаря была добавлена в ключи вместо перезаписи. Пример:

 dictionary 1 - 'key1' : ['place1' , 'web address', 'phone number']  dictionary 2 - 'key1' : ['place2', 'different web address', 'different phone number']  

Я бы хотел, чтобы окончательный словарь выглядел примерно так:

 finalDictionary - 'key1' : [['place1' , 'web address', 'phone number'], ['place2', 'different web address', 'different phone number']]   

Комментарии:

1. Это единственный ключ, который вам нужно объединить, или вам нужно сделать это для всех ключей в словарях?

2. Мне нужно сделать это для всех ключей в обоих словарях

Ответ №1:

Я бы использовал a defaultdict и перебрал все ключи/значения в диктах, чтобы добавить все значения в списки в окончательном дикте:

 gt;gt;gt; dict1 = {'key1' : ['place1' , 'web address', 'phone number']} gt;gt;gt; dict2 = {'key1' : ['place2', 'different web address', 'different phone number']} gt;gt;gt; from collections import defaultdict gt;gt;gt; final_dict = defaultdict(list) gt;gt;gt; for d in (dict1, dict2): ... for k, v in d.items(): ... final_dict[k].append(v) ...  gt;gt;gt; dict(final_dict) {'key1': [['place1', 'web address', 'phone number'], ['place2', 'different web address', 'different phone number']]}  

Ответ №2:

 dct_1 = {'key1' : ['place1' , 'web address', 'phone number']} dct_2 = {'key1' : ['place2', 'different web address', 'different phone number']}  final_dct = {'key1':[dct['key1'] for dct in [dct_1, dct_2]]}  

(или лучше)

 list_of_dct = [{'key1': [stuff]},  {'key1': [more stuff]},  ] final_dct = {'key1':[dct['key1'] for dct in list_of_dct]}  

Ответ №3:

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

 finalDictionary = {key: [dictionary1[key], dictionary2[key]] for key in dictionary1}