希望在Python中有效地处理字典。
我有一本字典
dict = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5}
我想仅对其值的子集执行计算。计算中要考虑的值基于其键。比如,这些密钥将在密钥列表中。
例如,如果我想添加键a
,b
和e
的值(即keys_list_to_add
= [' a&#39 ;,' b',' e'])我希望结果为20
。注意,可能存在几个这样的子集计算,并且可能缺少密钥(因此,在这种情况下可能会引发异常)。
看到这个answer之后,我试图实现它而没有成功,因为我还在学习Python。您能为我的问题提供代码建议吗?
答案 0 :(得分:3)
您可以使用基于键返回dict
值的sum
和generator 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