根据字典中的某些值的键对其执行计算(Python)

根据字典中的某些值的键对其执行计算(Python),python,python-3.x,dictionary,Python,Python 3.x,Dictionary,希望了解如何在Python中高效地处理字典 我有一本字典 dict = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5} 我只想对其值的子集执行计算。计算中要考虑的值是基于它们的键的。例如,这些键将位于键列表中 例如,如果我想添加键a、b和e(即keys\u list\u to\u add=['a','b','e'])的值,我希望结果是20。请注意,可能存在多个这样的子集计算,并且可能缺少一个键(因此,在这种情况下可能会引发异常) 看到这一点后,我尝试实现它

希望了解如何在Python中高效地处理字典

我有一本字典

dict = {'a': 11, 'b': 4, 'c': 7, 'd': 12, 'e': 5}
我只想对其值的子集执行计算。计算中要考虑的值是基于它们的键的。例如,这些键将位于键列表中

例如,如果我想添加键
a
b
e
(即
keys\u list\u to\u add
=['a','b','e'])的值,我希望结果是
20
。请注意,可能存在多个这样的子集计算,并且可能缺少一个键(因此,在这种情况下可能会引发异常)


看到这一点后,我尝试实现它,但没有成功,因为我还在学习Python。您能为我的问题提供代码建议吗?

您可以使用和实现给定的示例,该示例基于键返回
dict
值:

>>> 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
如果给定的键在
dict
中不存在,则会引发
KeyError

>>> 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'
或者您可以将缺少的键解释为
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
dict(a=1) {'a':1} >>>dict={1:2} >>>dict(a=1) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:“dict”对象不可调用
您可以使用和实现给定的示例,该示例基于键返回
dict
值:

>>> 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
如果给定的键在
dict
中不存在,则会引发
KeyError

>>> 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'
或者您可以将缺少的键解释为
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
dict(a=1) {'a':1} >>>dict={1:2} >>>dict(a=1) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:“dict”对象不可调用
是否保证密钥的“子集”实际上是一个子集?如果“子集”中的某个键实际上不在您的字典中,答案是否允许引发异常?@RoryDaulton如果某个键丢失,则应引发异常,是的。(修改后的问题)是否保证密钥的“子集”实际上是子集?如果“子集”中的某个键实际上不在您的字典中,答案是否允许引发异常?@RoryDaulton如果某个键丢失,则应引发异常,是的。(修改后的问题)这就是我想要的,谢谢。请详细说明如何处理
键错误
?我不明白如何在
try.。除了
如果在
for
循环之前添加
键列表中的k,那么应该实现
。@nk fford我添加了几个选项来处理缺少的键,但由于我不知道上下文,所以无法判断“正确”的方式是什么,这就是我想要的,谢谢。请详细说明如何处理
键错误
?我不明白如何在
try.。除了
如果在
for
循环之前添加
键列表中的k,则应执行
。@nk fford我添加了几个选项来处理缺少的键,但因为我不知道上下文,所以无法判断“正确”的方法是什么,