Sumar Contadores de Palabras
Descripción
Imagina que ejecutas la función value_counts
con dos palabras diferentes y guardas los resultados en dos diccionarios
Suppose you run value_counts with two different words and save the results in two dictionaries.
counter1 = value_counts('brontosaurus')
counter2 = value_counts('apatosaurus')
Cada diccionario asocia un conjunto de letras con el número de veces que aparecen. Escribe una función llamada add_counters
que tome dos diccionarios como estos y devuelva un nuevo diccionario que contenga todas las letras y el total de veces que aparecen en cualquiera de las dos palabras.
Hay muchas formas de resolver este problema, Una vez que tengas una solución que funciona, considera preguntarle a un asistente virtual por otras soluciones.
Ejemplo de Ejecución:
# Algunas repetidas
counter1 = value_counts('brontosaurus')
counter2 = value_counts('apatosaurus')
print(add_counters(counter1, counter2))
# Ninguna repetida
counter1 = {'c': 1, 'a': 1, 't': 1} # cat
counter2 = {'d': 1, 'o': 1, 'g': 1} # dog
print(add_counters(counter1, counter2))
# Todas repetidas
counter1 = {'s': 1, 'p': 1, 'o': 1, 't': 1} # spot
counter2 = {'s': 1, 't': 1, 'o': 1, 'p': 1} # stop
print(add_counters(counter1, counter2))
{'b': 1, 'r': 3, 'o': 3, 'n': 1, 't': 2, 's': 4, 'a': 4, 'u': 4, 'p': 1}
{'c': 1, 'a': 1, 't': 1, 'd': 1, 'o': 1, 'g': 1}
{'s': 2, 'p': 2, 'o': 2, 't': 2}
Solución
Mostrar solución
def value_counts(string):
counter = {}
for letter in string:
counter[letter] = counter.get(letter, 0) + 1
return counter
def add_counters(counter1, counter2):
result = {}
for k, v in counter1.items():
result[k] = counter1.get(k, 0)
for k, v in counter2.items():
if k in result:
result[k] += counter2[k]
else:
result[k] = counter2.get(k, 0)
return result
# Algunas repetidas
counter1 = value_counts('brontosaurus')
counter2 = value_counts('apatosaurus')
print(add_counters(counter1, counter2))
# Ninguna repetida
counter1 = {'c': 1, 'a': 1, 't': 1} # cat
counter2 = {'d': 1, 'o': 1, 'g': 1} # dog
print(add_counters(counter1, counter2))
# Todas repetidas
counter1 = {'s': 1, 'p': 1, 'o': 1, 't': 1} # spot
counter2 = {'s': 1, 't': 1, 'o': 1, 'p': 1} # stop
print(add_counters(counter1, counter2))
Fuente del ejercicio: https://allendowney.github.io/ThinkPython/chap10.html#id3