В Python 2 вы можете избежать создания временной копии всех значений, используя метод itervalues()
dictionary, который возвращает итератор ключей словаря:
sum(d.itervalues())
В Python 3 вы можете просто использовать d.values()
, потому что для этого был изменен этот метод (и itervalues()
был удален, поскольку он больше не нужен).
Для облегчения написания независимого от версии кода, который всегда перебирает значения ключей словаря, может быть полезна служебная функция:
import sys
def itervalues(d):
return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())
sum(itervalues(d))
По сути, это то, что делает модуль six
Бенджамина Петерсона.