下午好。
如果我的问题看起来很愚蠢或者它已经发布(我寻找过但似乎没有找到任何东西),我很抱歉。如果我错了,请告诉我:我是新来的,我可能会不是最擅长寻找正确问题)。
我想知道是否可以从 python 字典中删除(弹出)通用项目。这个想法来自以下练习:
编写一个函数来查找给定字典中的 VALUES 之和。
显然有很多方法可以做到这一点:求和dictionary.values(),为总和创建一个变量并迭代字典并更新它,等等。但我试图用递归来解决它,比如:
def total_sum(dictionary):
if dictionary == {}:
return 0
return dictionary.pop() + total_sum(dictionary)
Run Code Online (Sandbox Code Playgroud)
这个想法的问题在于,我们不知道先验哪个可能是字典的“第一个”键,因为它是无序的:如果它是一个列表,那么索引 0 将被使用,并且一切都会起作用。由于我不关心项目弹出的顺序,因此有办法删除任何项目(“通用”项目)就足够了。你认为这样的事情是可能的还是我必须使用一些辅助变量,失去使用递归的全部意义,其优点是代码非常简洁?
我实际上找到了以下解决方案,不过,正如您所看到的,它使代码更加复杂且难以阅读:我认为如果有一些内置的、简单且直接的解决方案来解决该特定问题,它仍然会很有趣且有用删除字典的“第一个”项目,尽管可以找到许多“人为”的替代解决方案。
def total_sum(dictionary):
if dictionary == {}:
return 0
return dictionary.pop(list(dictionary.keys())[0]) + total_sum(dictionary)
Run Code Online (Sandbox Code Playgroud)
如果您想进行一些简单的测试,我将为您提供一个可以应用该函数的简单示例字典。
ex_dict = {"milk":5, "eggs":2, "flour": 3}
Run Code Online (Sandbox Code Playgroud)