2015-06-05 4 views
0

У меня есть два словаря:Как слить два словаря со значениями?

{ 
'1234': 
    { 
     '2015-05-31T00:00:00.000Z': 795, 
     '2015-05-21T00:00:00.000Z': 985, 
     '2015-05-29T00:00:00.000Z': 805, 
     '2015-05-28T00:00:00.000Z': 955, 
     '2015-06-04T00:00:00.000Z': 1365, 
     '2015-05-24T00:00:00.000Z': 845, 
     '2015-06-03T00:00:00.000Z': 1545, 
     '2015-05-23T00:00:00.000Z': 825, 
     '2015-05-30T00:00:00.000Z': 875, 
     '2015-05-22T00:00:00.000Z': 1165, 
     '2015-05-27T00:00:00.000Z': 1065, 
     '2015-06-01T00:00:00.000Z': 1145, 
     '2015-06-05T00:00:00.000Z': 625, 
     '2015-05-20T00:00:00.000Z': 745, 
     '2015-06-02T00:00:00.000Z': 1405, 
     '2015-05-26T00:00:00.000Z': 1255, 
     '2015-05-25T00:00:00.000Z': 1135 
    } 
} 

и

{ 
'1234': 
    { 
     '2015-05-31T00:00:00.000Z': 794, 
     '2015-05-21T00:00:00.000Z': 980, 
     '2015-05-29T00:00:00.000Z': 802, 
     '2015-06-02T00:00:00.000Z': 1400, 
     '2015-05-26T00:00:00.000Z': 1256, 
     '2015-05-25T00:00:00.000Z': 1138 
    } 
} 

Как я могу объединить эти два dicts со следующими и если элемент ключ-значение существующего, объединить эти два значения?

+0

Какова логика слияния? Что вы хотите сделать и что вы пробовали до сих пор? – locoboy

+0

Каков ваш ожидаемый результат? что вы пробовали? –

+0

Вы уверены, что это словари? Это не похоже на em ... – Zizouz212

ответ

1

Вы можете добавить dict_b в dict_a с помощью обновления

dict_a.update(dict_b) 

это приведет к перезаписи значения в dict_a со значениями из dict_b где есть перекрывающиеся ключи, и он также добавляет новые ключи от dict_b.

Если вы хотите сделать это в третий словарь, не затрагивая первые два, то первый экземпляр Словаре

dict_c = dict_a.copy() 
dict_c.update(dict_b) 
1

Вы можете перебрать Словаре, если вы хотите, чтобы объединить их. Не уверен, что это лучший способ.

dict1 = {'1234': {'2015-05-31T00:00:00.000Z': 795, '2015-05-21T00:00:00.000Z': 985, '2015-05-29T00:00:00.000Z': 805, '2015-05-28T00:00:00.000Z': 955, '2015-06-04T00:00:00.000Z': 1365, '2015-05-24T00:00:00.000Z': 845, '2015-06-03T00:00:00.000Z': 1545, '2015-05-23T00:00:00.000Z': 825, '2015-05-30T00:00:00.000Z': 875, '2015-05-22T00:00:00.000Z': 1165, '2015-05-27T00:00:00.000Z': 1065, '2015-06-01T00:00:00.000Z': 1145, '2015-06-05T00:00:00.000Z': 625, '2015-05-20T00:00:00.000Z': 745, '2015-06-02T00:00:00.000Z': 1405, '2015-05-26T00:00:00.000Z': 1255, '2015-05-25T00:00:00.000Z': 1135}} 
dict2 = {'1234': {'2015-05-31T00:00:00.000Z': 794, '2015-05-21T00:00:00.000Z': 980, '2015-05-29T00:00:00.000Z': 802, '2015-06-02T00:00:00.000Z': 1400, '2015-05-26T00:00:00.000Z': 1256, '2015-05-25T00:00:00.000Z': 1138}} 
dict3 = {'1234': {}} 

for key, value in dict1['1234'].iteritems(): 
    if key in dict2['1234'].keys(): 
     dict3['1234'][key] = value + dict2['1234'][key] 
    else: 
     dict3['1234'][key] = value 

Выход:

{ 
    '1234': 
     { 
     '2015-05-31T00:00:00.000Z': 1589, 
     '2015-05-26T00:00:00.000Z': 2511, 
     '2015-05-21T00:00:00.000Z': 1965, 
     '2015-05-22T00:00:00.000Z': 1165, 
     '2015-05-27T00:00:00.000Z': 1065, 
     '2015-06-01T00:00:00.000Z': 1145, 
     '2015-05-28T00:00:00.000Z': 955, 
     '2015-06-05T00:00:00.000Z': 625, 
     '2015-06-02T00:00:00.000Z': 2805, 
     '2015-06-04T00:00:00.000Z': 1365, 
     '2015-05-20T00:00:00.000Z': 745, 
     '2015-05-23T00:00:00.000Z': 825, 
     '2015-05-24T00:00:00.000Z': 845, 
     '2015-05-30T00:00:00.000Z': 875, 
     '2015-05-25T00:00:00.000Z': 2273, 
     '2015-06-03T00:00:00.000Z': 1545, 
     '2015-05-29T00:00:00.000Z': 1607 
     } 
} 

Apperently есть модуль для этого уже. Согласно https://docs.python.org/2/library/collections.html;

0

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

new_dict = {} 

for key in dict_2.keys(): 
    new_dict[key] = {} 
    for subkey in dict_2[key]: 
     if subkey in dict_1[key]: 
      result = dict_1[key][subkey] + dict_2[key][subkey] 
      new_dict[key][subkey] = result 

print(new_dict) 

Выход:

{ 
    '1234': 
     { 
      '2015-05-31T00:00:00.000Z': 1589, 
      '2015-05-26T00:00:00.000Z': 2511, 
      '2015-05-21T00:00:00.000Z': 1965, 
      '2015-06-02T00:00:00.000Z': 2805, 
      '2015-05-25T00:00:00.000Z': 2273, 
      '2015-05-29T00:00:00.000Z': 1607 
     } 
} 
1

Это может быть другое решение:

from itertools import chain 
z = dict(chain(dict_a.iteritems(), dict_b.iteritems())) 

Это может забить лучше по производительности перед решением copy.

1

Я не уверен, что вы подразумеваете под «слиянием». Если вы слейте их, значения тех же ключей будут перезаписаны. Лично я конвертировал словари в строки, затем делал некоторые изменения и конвертировал все обратно в словарь с literal_eval. Он работает очень хорошо.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import ast 

d1 ={'1234':{'2015-05-31T00:00:00.000Z':795}} 
d2 ={'1234':{'2015-05-31T00:00:00.000Z':794}} 

s=str(d1)+str(d2) 
s=s.replace('}{', ',') 

d3=ast.literal_eval(s) 

print d3 

Выход:

{'1234': {'2015-05-31T00:00:00.000Z': 794}} 

Если это то, что вы имеете в виду.

Смежные вопросы