如果A和B是两个字典,使用Python,有没有办法从字典A中删除在字典B中的元素?
例如:
现在我需要编写一个函数dict_reduce(dictA, dictB),它可以从dictA中删除dictB的所有元素。
即,dict_reduce(parent_dict, derived_dict)应该返回{"b" : "bbb", "c" : "ccc"}。
我的解决方法是使用for循环:
例如:
parent_dict = {"a" : "aaa", "b" : "bbb", "c" : "ccc", "d" : "ddd", "e": "eee"}
derived_dict = {"a" : "aaa", "d" : "ddd", "e" : "eee"}
现在我需要编写一个函数dict_reduce(dictA, dictB),它可以从dictA中删除dictB的所有元素。
即,dict_reduce(parent_dict, derived_dict)应该返回{"b" : "bbb", "c" : "ccc"}。
我的解决方法是使用for循环:
def dict_reduce(parent_dict, child_dict):
for key in child_dict.keys():
del parent_dict[key]
return parent_dict
reduced_dict = dict_reduce(parent_dict, child_dict)
注意:
- 如果解决方案是一行代码或者不需要使用for循环,那将会非常好。
- 我们无需在删除之前检查父字典是否有该键,因为子字典是从父字典派生而来的。所以不用考虑keyError。
- 父字典是一个静态字典,不应该受到该方法的影响。相反,返回的字典应该存储在另一个减少的字典中。
- 没有必要检查child_dict是否具有与parent_dict相同的键。只有键才重要。
for
循环有什么意见?你的函数看起来非常清晰,一旦你写好了这个函数,每次使用它都只需要一行代码,并且也很易读。当一个三行函数能完成任务时,没有人会因编写过于聪明和晦涩难懂的代码而得到奖励。 - Duncanmap
、filter
、列表推导式还是其他方法,即使你没有明确地写出来,你最终都会用到一个for循环。 - neurino