You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字典内部列表值去重 支持任意字段通用配置

字典嵌套列表通用去重方案

本方案可对任意深度嵌套的字典、列表混合结构做自动去重,无需针对特定字段单独配置,可覆盖所有字段场景。

输入数据示例

{'Customer_Number': 90617174, 'Email': [{'Email_Type': 'Primary', 'Email': ['saman.zonouz@rutgers.edu', 'saman.zonouz@rutgers.edu']}], 'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [12177218280, 12177218280]}]}

期望输出示例

{'Customer_Number': 90617174, 'Email': [{'Email_Type': 'Primary', 'Email': ['saman.zonouz@rutgers.edu']}], 'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [12177218280]}]}

原有代码问题说明

你之前编写的代码仅遍历了字典的最外层键,没有处理内部嵌套的子字典、列表结构,因此无法实现内层列表的去重效果。

通用去重实现代码

def deduplicate_nested_structure(obj):
    # 处理字典类型
    if isinstance(obj, dict):
        return {key: deduplicate_nested_structure(value) for key, value in obj.items()}
    # 处理列表类型
    elif isinstance(obj, list):
        # 先递归处理列表内每个元素
        processed_items = [deduplicate_nested_structure(item) for item in obj]
        # 尝试对可哈希元素去重,保留原始顺序
        try:
            # 利用Python3.7+字典插入有序特性去重
            return list(dict.fromkeys(processed_items))
        except TypeError:
            # 存在不可哈希元素(如子字典)时返回处理后的列表,不做外层去重
            return processed_items
    # 其他基础类型直接返回
    else:
        return obj

使用示例

# 输入数据
original_dic = {'Customer_Number': 90617174, 'Email': [{'Email_Type': 'Primary', 'Email': ['saman.zonouz@rutgers.edu', 'saman.zonouz@rutgers.edu']}], 'Phone_Number': [{'Phone_Type': 'Mobile', 'Phone': [12177218280, 12177218280]}]}

# 调用去重方法
deduplicated_dic = deduplicate_nested_structure(original_dic)

# 输出结果
print(deduplicated_dic)

功能特性

  • 自动适配所有字段:无需手动指定待去重字段,递归遍历所有嵌套层级
  • 保留元素顺序:去重后列表元素顺序与原始顺序完全一致
  • 兼容任意嵌套结构:支持字典、列表任意深度嵌套的业务场景
  • 无侵入性:不会修改原始输入数据,返回全新的处理后对象

内容的提问来源于stack exchange,提问作者Naveen Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:04