根据字典中的某些值的键对其执行计算(Python)
希望了解如何在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。请注意,可能存在多个这样的子集计算,并且可能缺少一个键(因此,在这种情况下可能会引发异常) 看到这一点后,我尝试实现它
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我添加了几个选项来处理缺少的键,但因为我不知道上下文,所以无法判断“正确”的方法是什么,