Объединение словарей Python с одинаковыми ключами

У меня есть список словарей Python с теми же ключами. Я хотел бы создать большой словарь из списка. Дело в том, что я не могу использовать обновление для создания нового, потому что, поскольку ключи одинаковы, значение для каждого ключа перезаписывается в процессе. Пример моего списка:

[{0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0',
  1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M',
  ...
  195: u'ChIJv1KfnmMpQg0R5iC9EmaXN6M',
  196: u'ChIJd0vQCiOEQQ0RasOKsxksdys'},
 {0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0',
  1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M',
  2: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs',
  3: u'ChIJ-TjccjhvQg0RVQmnPNgAJv4',
  ...
  100: u'ChIJN7zqEhgmQg0R-NzvqSYG_Ds',
  101: u'ChIJPTR-xaYoQg0RUrX7K8kQhU4',
  102: u'ChIJV_pHsIsoQg0ReGKLBXDqOc8',
  103: u'ChIJtXpyqps7Qg0RXq37551oP4o',...

То, что я хочу, это больший словарь следующей формы:

{0: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0',
  1: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M',
  2: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs',
  3: u'ChIJ-TjccjhvQg0RVQmnPNgAJv4',
  ...
  195: u'ChIJv1KfnmMpQg0R5iC9EmaXN6M',
  196: u'ChIJd0vQCiOEQQ0RasOKsxksdys', ###HERE STARTS THE NEW DICT!!
  197: u'ChIJIxtmpVdCQg0R_TCH5ttvqC0',
  198: u'ChIJ2RMaMThvQg0R_6hmMXFiG_M',
  199: u'ChIJQ3PGOWlfQg0RkV-a6JQdrFs',
  ...

Где ключи увеличиваются до количества экземпляров среди всех словарей.

Заранее спасибо.

4 ответа

Решение

Вы можете просто получить текущий размер словаря в качестве ключа для каждого элемента.

myDict = {}
for dictionary in dictionaries:
  for key in dictionary:
    myDict[len(myDict)] = dictionary[key]

Попробуйте что-то вроде этого:

vals = []
for d in list_of_dicts:
   vals.extend(d.values())

max_dict = dict(enumerate(vals))

Чтобы объединить dict2 в dict1, это должно сработать

dict1 = {1: 'a', 2: 'b'}
dict2 = {1: 'c', 2: 'd'}

max_key_in_dict1 = max(dict1.keys())
for key in dict2.keys():
    dict1[key+max_key_in_dict1] = dict2[key]
del dict2

dict1 тогда:

{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

Если, как вы говорите, ключи являются своего рода идентификаторами в том смысле, что они являются последовательными целыми числами, и вы хотите отсортировать значения во втором dict, то есть забыть их исходные ключи, тогда это может сработать:

dict(enumerate(list(dict1.values()) + list(dict2.values())))

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

dict(enumerate([item for sublist in [list(d.values()) for d in dicts] for item in sublist]))

(Понимание внешнего списка скопировано из принятого ответа на этот вопрос: создание простого списка из списка списков в Python)

Другие вопросы по тегам