En Python 2 se puede evitar hacer una copia temporal de todos los valores utilizando el método itervalues()
diccionario, que devuelve un iterador de claves del diccionario:
sum(d.itervalues())
En Python 3 que sólo puede use d.values()
porque ese método fue cambiado para hacer eso (y se eliminó itervalues()
porque ya no era necesario).
Para que sea más fácil escribir código versión independiente que siempre itera sobre los valores de las claves del diccionario, una función de utilidad puede ser útil:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
Esto es esencialmente lo que hace el módulo de Benjamin Peterson six
.
Simplemente por diversión: implemente 'sum' usted mismo en términos de [' reduce'] (http://docs.python.org/library/functions.html) - 'reduce' es una forma más general (por ejemplo' sum', 'min' y' max' pueden escribirse en términos de 'reducir') y pueden resolver otros problemas (por ejemplo' product') fácilmente. –
¿Qué hay del dicho de Guido, creo que recuerdo esto correctamente, que la reducción se va? Estoy contigo. ¿Por qué eliminarlo del idioma? – octopusgrabbus