You need to enable JavaScript to run this app. 如何从Python字典列表中移除值无序匹配的重复字典
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python字典列表中移除值无序匹配的重复字典

字典列表按slice值无序去重实现方法

核心思路

因为业务判定不关心slice前缀键的取值顺序,我们可以将每个字典的所有slice对应值排序后生成唯一可哈希的指纹,通过指纹判断是否重复,仅保留首次出现的字典。

实现代码

original_list = [
    {'slice1': 'apple', 'slice2': 'grape', 'slice3': 'banana'},
    {'slice1': 'apple', 'slice2': 'apple', 'slice3': 'grape'}, 
    {'slice1': 'apple', 'slice2': 'grape', 'slice3': 'apple'},
    {'slice1': 'apple', 'slice2': 'apple', 'slice3': 'apple'},
    {'slice1': 'banana', 'slice2': 'grape', 'slice3': 'apple'},
    {'slice1': 'banana', 'slice2': 'banana', 'slice3': 'grape'},
    {'slice1': 'banana', 'slice2': 'banana', 'slice3': 'banana'},
    {'slice1': 'grape', 'slice2': 'grape', 'slice3': 'apple'},
    {'slice1': 'grape', 'slice2': 'apple', 'slice3': 'grape'},
    {'slice1': 'grape','slice2': 'grape', 'slice3': 'grape'}
]

seen_fingerprints = set()
dedup_result = []

for item in original_list:
    # 提取所有slice前缀键的取值,排序后生成唯一指纹
    slice_values = [value for key, value in item.items() if key.startswith("slice")]
    current_fingerprint = tuple(sorted(slice_values))
    if current_fingerprint not in seen_fingerprints:
        seen_fingerprints.add(current_fingerprint)
        dedup_result.append(item)

# 输出去重后的结果
print(dedup_result)

说明

  • 该方法兼容任意数量的slice前缀键,后续新增slice4、slice5等字段无需修改逻辑
  • 去重后保留原列表中首次出现的字典,顺序和原列表一致
  • 时间复杂度为O(n*m log m),其中n为字典列表长度,m为每个字典的slice键数量,大部分业务场景下性能足够

内容的提问来源于stack exchange,提问作者J. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:15:09