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

如何检查字典列表中是否有键值对重复出现?

字典列表特定键值对重复检查方案

问题场景

给定字典列表:

people_list = [{"name":"joe", "age":20}, {"name":"tom", "age":35}, {"name":"joe", "age":46}]

需要检查其中特定键(比如name)的取值是否存在重复。

你的代码问题点

你写的代码有几个明显问题:

  • 语法错误:range(len(people_list) 少了闭合括号,运行会直接报错
  • 每次循环创建新Counter但未保存结果,等于做了无效统计
  • 遍历Counter的方式错误,得先把所有目标值收集起来再统一统计,不能单个字典单独处理

正确实现方式

方法1:用Counter统计并检查重复

先提取所有目标键的值,再用Counter统计出现次数,最后判断是否存在重复:

from collections import Counter

# 提取所有name字段的值
name_list = [p["name"] for p in people_list]
# 统计每个name的出现次数
name_count = Counter(name_list)

# 判断是否存在重复
has_duplicate = any(num > 1 for num in name_count.values())
print(has_duplicate)  # 输出True,因为joe出现两次

# 若需找出具体重复的内容
duplicate_names = [name for name, cnt in name_count.items() if cnt > 1]
print(duplicate_names)  # 输出['joe']

方法2:用集合快速判断(仅需知道是否重复)

如果不需要统计具体重复次数,用集合的去重特性会更高效:

name_list = [p["name"] for p in people_list]
has_duplicate = len(name_list) != len(set(name_list))
print(has_duplicate)  # 输出True

扩展:检查完整字典是否重复

如果你的需求是判断整个字典的键值对完全重复(比如两个字典所有键值都一致),可以把字典转成可哈希的元组再处理:

from collections import Counter

# 把字典转成排序后的键值元组,避免键顺序影响判断
dict_tuples = [tuple(sorted(p.items())) for p in people_list]
dict_count = Counter(dict_tuples)

has_duplicate_dicts = any(cnt > 1 for cnt in dict_count.values())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:31:35