基于键(Python)对字典中的某些值进行计算

时间:2016-06-11 16:26:05

标签: python python-3.x dictionary

希望在Python中有效地处理字典。

我有一本字典

dict = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5}

我想仅对其值的子集执行计算。计算中要考虑的值基于其键。比如,这些密钥将在密钥列表中。

例如,如果我想添加键abe的值(即keys_list_to_add = [' a&#39 ;,' b',' e'])我希望结果为20。注意,可能存在几个这样的子集计算,并且可能缺少密钥(因此,在这种情况下可能会引发异常)。

看到这个answer之后,我试图实现它而没有成功,因为我还在学习Python。您能为我的问题提供代码建议吗?

1 个答案:

答案 0 :(得分:3)

您可以使用基于键返回dict值的sumgenerator expression来实现给定示例:

>>> d = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5}
>>> keys_list_to_add = ['a', 'b', 'e']
>>> sum(d[k] for k in keys_list_to_add)
20

如果KeyError中不存在给定密钥,则会引发dict

>>> keys_list_to_add = ['a', 'b', 'f']
>>> sum(d[k] for k in keys_list_to_add)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <genexpr>
KeyError: 'f'

如果您想以某种方式处理错误,可以使用try/except

>>> try:
...     sum(d[k] for k in keys_list_to_add)
... except KeyError:
...     print 'Missing key'
...
Missing key

或者您可以将缺失的密钥解释为0

>>> sum(d.get(k, 0) for k in keys_list_to_add)
15

请注意,您不应对变量使用内置方法名称,例如dict,因为隐藏了该方法:

>>> dict(a=1)
{'a': 1}
>>> dict = {1:2}
>>> dict(a=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'dict' object is not callable