Python编程中,处理嵌套字典是常见操作。本文探讨如何从三层嵌套字典中删除最内层字典值完全相同的键。
问题描述: 给定一个三层嵌套字典,其最内层字典可能具有相同的值。目标是删除所有最内层字典值完全相同的键。
示例:
输入字典:
dict1 = {'l1':{'pop1':{'a':1}, 'pop2':{'a':1}, 'pop3':{'a':1}}, 'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}
预期输出字典:
dict2 = {'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}}
在dict1中,'l1'键对应的最内层字典值都为{'a':1},因此需要删除'l1'。
挑战: 直接使用集合判断字典值是否相同会报错,因为字典是不可哈希的。
解决方案: 通过遍历字典并逐个比较最内层字典值来解决。
代码:
def remove_identical_inner_dicts(input_dict): """ 删除三层嵌套字典中内层字典值完全相同的键。 Args: input_dict: 输入的三层嵌套字典。 """ # 创建一个副本,避免修改原始字典 working_dict = input_dict.copy() for key, value in working_dict.items(): inner_dicts = list(value.values()) # 获取所有内层字典 if all(inner_dicts[0] == inner_dict for inner_dict in inner_dicts): # 判断所有内层字典是否相同 del input_dict[key] # 删除原始字典中的键 # 测试代码 dict1 = {'l1':{'pop1':{'a':1}, 'pop2':{'a':1}, 'pop3':{'a':1}}, 'l2':{'pop1':{'b':1}, 'pop2':{'b':1}, 'pop3':{'b':2}}, 'l3':{'pop1':{'c':1}, 'pop2':{'c':2}, 'pop3':{'c':3}}} remove_identical_inner_dicts(dict1) print(dict1) # 输出dict2
此函数首先复制输入字典,然后迭代每一项。它提取所有内层字典并使用all()函数检查它们是否完全相同。如果是,则从原始字典中删除相应的键。 这避免了修改字典的同时迭代的错误。
以上就是如何在Python中删除三层嵌套字典中最里层值为相同字典的键?的详细内容,更多请关注知识资源分享宝库其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。