Python | Combine dos diccionarios agregando valores para claves comunes

Dados dos diccionarios, la tarea es combinar los diccionarios de modo que obtengamos los valores agregados para las claves comunes en el diccionario resultante. 
Ejemplo: 
 

Input: dict1 = {'a': 12, 'for': 25, 'c': 9}
       dict2 = {'Geeks': 100, 'geek': 200, 'for': 300}

Output: {'for': 325, 'Geeks': 100, 'geek': 200}

Veamos algunos de los métodos para realizar la tarea. 
Método #1: método ingenuo
 

Python3

# Python program to combine two dictionary
# adding values for common keys
# initializing two dictionaries
dict1 = {'a': 12, 'for': 25, 'c': 9}
dict2 = {'Geeks': 100, 'geek': 200, 'for': 300}
 
 
# adding the values with common key
for key in dict2:
    if key in dict1:
        dict2[key] = dict2[key] + dict1[key]
    else:
        pass
         
print(dict2)
Producción: 

{'for': 325, 'Geeks': 100, 'geek': 200}

 

 
Método #2: Usar colecciones.Contador()
 

Python3

# Python program to combine two dictionary
# adding values for common keys
from collections import Counter
 
# initializing two dictionaries
dict1 = {'a': 12, 'for': 25, 'c': 9}
dict2 = {'Geeks': 100, 'geek': 200, 'for': 300}
 
 
# adding the values with common key
         
Cdict = Counter(dict1) + Counter(dict2)
print(Cdict)
Producción: 

Counter({'for': 325, 'geek': 200, 'Geeks': 100, 'a': 12, 'c': 9})

 

 
Método #3: Usar itertools.chain()
 

Python3

# Python program to combine two dictionary
# adding values for common keys
import itertools
import collections
 
# initializing two dictionaries
dict1 = {'a': 12, 'for': 25, 'c': 9}
dict2 = {'Geeks': 100, 'geek': 200, 'for': 300}
 
# using defaultdict
Cdict = collections.defaultdict(int)
 
# iterating key, val with chain()
for key, val in itertools.chain(dict1.items(), dict2.items()):
    Cdict[key] += val
     
print(dict(Cdict))
Producción: 

{'for': 325, 'a': 12, 'geek': 200, 'Geeks': 100, 'c': 9}

 

 
 Método #4: Usar functools.reduce y dictar comprensión

Python3

#Here is another way to combine dictionaies and
#sum values of common keys (runs fast):
 
 
from functools import reduce
 
# creating three dictionaries in a list
dict_seq = [
  {'a': 1, 'b': 2, 'c': 3},
  {'a':10, 'b': 20},
  {'b': 100},
]
 
print(reduce(lambda d1,d2: {k: d1.get(k,0)+d2.get(k,0)
for k in set(d1)|set(d2)}, dict_seq))

Producción:

{'a': 11, 'b': 122, 'c': 3}

Publicación traducida automáticamente

Artículo escrito por Shivam_k y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *