你有有一个循环。但是,您可以隐藏循环。
您可以使用operator.itemgetter() object 为您执行此操作,例如:
from operator import itemgetter
average = sum(itemgetter(*list_of_keys)(your_dictionary)) / len(list_of_keys)
绝对明确:itemgetter() 现在循环遍历您的键列表并生成具有相应值的元组。
另一个“隐藏”循环是map() function;使用dict.get() 或dict.__getitem__() 作为要映射到的函数,map() 再次为您完成所有循环:
avegare = sum(map(your_dictionary.__getitem__, list_of_keys)) / len(list_of_keys)
dict.get 和dict.__getitem__ 之间的区别是缺少密钥时出现的异常;第一个将导致TypeError,因为您最终尝试将None 和一个数字相加,另一个会给您一个KeyError。
否则,只需在生成器表达式中使用循环:
average = sum(your_dictionary[k] for k in list_of_keys) / len(list_of_keys)
演示:
>>> from operator import itemgetter
>>> d = {'a': 1.0, 'z': 0.97, 'c': 0.9, 'b': 1.1}
>>> selected = ['a', 'b', 'c']
>>> sum(itemgetter(*selected)(d)) / len(selected)
1.0
>>> sum(map(d.__getitem__, selected)) / len(selected)
1.0
>>> sum(d[k] for k in selected) / len(selected)
1.0