动态嵌套对象列表中仅最深层子列表内部去重的实现方案咨询
实现方案
完全可以实现,用递归遍历任意嵌套结构即可,核心逻辑是判断当前列表是否为最深层子列表(即列表内所有元素都不是dict或list类型),仅对这类列表做内部去重,其余结构原样保留。
核心实现代码
def deduplicate_deepest_lists(obj): # 处理字典类型:递归处理每个value if isinstance(obj, dict): return {k: deduplicate_deepest_lists(v) for k, v in obj.items()} # 处理列表类型 elif isinstance(obj, list): # 检查是否为最深层子列表:所有元素都不是dict/list is_deepest = all(not isinstance(item, (dict, list)) for item in obj) if is_deepest: # 保留元素原有顺序去重,Python3.7+原生支持 return list(dict.fromkeys(obj)) # 不要求顺序可替换为以下写法,效率更高 # return list(set(obj)) else: # 非最深层列表:递归处理每个元素 return [deduplicate_deepest_lists(item) for item in obj] # 其他基础类型直接返回 else: return obj # 调用示例 my_list = # 你的原始嵌套数据 processed_list = deduplicate_deepest_lists(my_list)
逻辑说明
- 递归自动适配任意层级的dict、list嵌套,不需要预先获知数据结构规则
- 仅对没有嵌套其他容器的最深层子列表做去重,不同子列表中的重复内容会完全保留,符合需求
- 用
dict.fromkeys去重可以保留元素在列表中的首次出现顺序,避免set()打乱顺序的问题
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

