Ha dado una lista de diccionarios, la tarea es devolver un solo diccionario con valores de suma con la misma clave.
Vamos a discutir diferentes métodos para hacer la tarea.
Método #1: Usarreduce() + operator
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary import collections, functools, operator # Initialising list of dictionary ini_dict = [{'a':5, 'b':10, 'c':90}, {'a':45, 'b':78}, {'a':90, 'c':10}] # printing initial dictionary print ("initial dictionary", str(ini_dict)) # sum the values with same keys result = dict(functools.reduce(operator.add, map(collections.Counter, ini_dict))) print("resultant dictionary : ", str(result))
diccionario inicial [{‘b’: 10, ‘a’: 5, ‘c’: 90}, {‘b’: 78, ‘a’: 45}, {‘a’: 90, ‘c’: 10} ]
diccionario resultante: {‘b’: 88, ‘a’: 140, ‘c’: 100}
Método #2: Usar el contador
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary import collections # Initialising list of dictionary ini_dict = [{'a':5, 'b':10, 'c':90}, {'a':45, 'b':78}, {'a':90, 'c':10}] # printing initial dictionary print ("initial dictionary", str(ini_dict)) # sum the values with same keys counter = collections.Counter() for d in ini_dict: counter.update(d) result = dict(counter) print("resultant dictionary : ", str(counter))
diccionario inicial [{‘c’: 90, ‘a’: 5, ‘b’: 10}, {‘a’: 45, ‘b’: 78}, {‘a’: 90, ‘c’: 10} ]
diccionario resultante: contador ({‘a’: 140, ‘c’: 100, ‘b’: 88})
Método #3: Método Ingenuo
# Python code to demonstrate # return the sum of values of dictionary # with same keys in list of dictionary from operator import itemgetter # Initialising list of dictionary ini_dict = [{'a':5, 'b':10, 'c':90}, {'a':45, 'b':78}, {'a':90, 'c':10}] # printing initial dictionary print ("initial dictionary", str(ini_dict)) # sum the values with same keys result = {} for d in ini_dict: for k in d.keys(): result[k] = result.get(k, 0) + d[k] print("resultant dictionary : ", str(result))
diccionario inicial [{‘b’: 10, ‘c’: 90, ‘a’: 5}, {‘b’: 78, ‘a’: 45}, {‘c’: 10, ‘a’: 90} ]
diccionario resultante: {‘b’: 88, ‘c’: 100, ‘a’: 140}
Publicación traducida automáticamente
Artículo escrito por garg_ak0109 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA