字典(dict)是 Python 中最常用的数据结构之一,判断操作是字典使用的核心技能——无论是检查键/值是否存在、判断字典状态,还是校验字典内容,都离不开这些高频用法。
本文整理了10 类最实用的字典判断操作,配详细代码示例,新手也能直接复制使用,适合收藏学习!
一、核心前提:字典的基本结构
先回顾字典格式:键(key) : 值(value) 成对存储,键必须唯一且不可变,值可以是任意数据类型。
# 示例字典(全文通用)
student = {
"name": "小明",
"age": 18,
"gender": "男",
"score": None
}
二、判断「键」是否存在(最常用)
判断键是否在字典中,优先用 in 关键字(时间复杂度 O(1),效率极高),这是 Python 官方推荐的最佳实践。
1. 基础判断:单个键是否存在
# 判断 "name" 键是否存在
print("name"in student) # 输出:True
# 判断 "id" 键是否存在
print("id"in student) # 输出:False
# 结合 not in:判断键不存在
print("id"notin student) # 输出:True
2. 进阶用法:条件语句中判断
实际开发中,常结合 if 做逻辑判断:
key = "score"
if key in student:
print(f"键 {key} 存在,值为:{student[key]}")
else:
print(f"键 {key} 不存在")
# 输出:键 score 存在,值为:None
❌ 避坑提醒
不要用 dict.get(key) 判断键是否存在! 如果值为 None/0/"",会误判为「键不存在」:
print(student.get("score")) # 输出 None
print(student.get("id")) # 输出 None
# 两个都返回 None,无法区分是键不存在还是值为 None
三、判断「值」是否存在
判断值(value) 是否在字典中,用 in + dict.values() 即可。
代码示例
# 判断值 "小明" 是否存在
print("小明"in student.values()) # 输出:True
# 判断值 20 是否存在
print(20in student.values()) # 输出:False
实战场景
快速查找字典中是否包含某个目标值:
if18in student.values():
print("字典中包含年龄 18")
# 输出:字典中包含年龄 18
四、判断字典状态(空/非空、长度)
1. 判断字典是否为空
Python 中空字典自动判定为 False,非空字典判定为 True,直接用 if 判断最简洁:
empty_dict = {}
not_empty_dict = {"a": 1}
# 判断空字典
ifnot empty_dict:
print("字典为空") # 输出:字典为空
# 判断非空字典
if not_empty_dict:
print("字典非空") # 输出:字典非空
2. 判断字典长度(键值对数量)
用 len(dict) 获取长度,结合条件判断:
# 判断字典是否有 3 个键值对
print(len(student) == 3) # 输出:False(实际有 4 个)
# 判断字典长度大于 0
print(len(student) > 0) # 输出:True
五、判断字典是否包含「多个键」
实际需求:一次性判断字典是否同时拥有多个指定键(比如校验接口参数字段)。
方法1:all() 函数(推荐)
# 需要校验的必填键
required_keys = ["name", "age", "score"]
# 判断所有必填键都存在
is_all_exist = all(key in student for key in required_keys)
print(is_all_exist) # 输出:True
方法2:集合子集判断(更简洁)
利用集合子集特性,代码更优雅:
# 将字典的键 和 目标键 都转为集合
print(set(required_keys).issubset(student.keys())) # 输出:True
六、判断值是否为「None/空值」
字典中值可能是 None、空字符串、空列表等,常需要判断这类空值:
# 1. 判断值为 None
print(student["score"] isNone) # 输出:True
# 2. 判断值为空字符串
student["address"] = ""
print(student["address"] == "") # 输出:True
# 3. 通用:判断值为「空/None」
defis_empty_value(value):
return value isNoneor value == ""or value == [] or value == {}
print(is_empty_value(student["score"])) # 输出:True
七、判断两个字典是否「完全相等」
直接用 == 比较,不关心键值对顺序(Python 3.7+ 字典有序,但比较时忽略顺序):
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 2, "a": 1}
dict3 = {"a": 1, "b": 3}
print(dict1 == dict2) # 输出:True(内容相同)
print(dict1 == dict3) # 输出:False(值不同)
八、判断字典是否「包含另一个字典」
需求:判断字典 A 是否包含字典 B 的所有键值对(常用于校验子集):
# 完整字典
user = {"name": "小红", "age": 20, "city": "北京"}
# 子集字典
sub_user = {"name": "小红", "age": 20}
# 判断子集
is_subset = all(item in user.items() for item in sub_user.items())
print(is_subset) # 输出:True
九、判断字典的「键/值类型」
校验字典中键或值的数据类型,保证数据合法性:
# 判断 "age" 的值是否为整数
print(isinstance(student["age"], int)) # 输出:True
# 判断所有值是否为字符串
all_str = all(isinstance(v, str) for v in student.values())
print(all_str) # 输出:False(age 是 int)
十、高级:判断字典是否「有重复值」
如果需要检查字典中是否存在重复的 value:
defhas_duplicate_values(d):
values = list(d.values())
return len(values) != len(set(values))
# 测试:无重复值
print(has_duplicate_values(student)) # 输出:False
# 测试:有重复值
test_dict = {"a": 1, "b": 1, "c": 2}
print(has_duplicate_values(test_dict)) # 输出:True
十一、高频实战场景总结
十二、速记口诀
- 相等比较直接
==,类型校验 isinstance
总结
- 字典判断**核心是
in/not in**,键判断优先用此方法,效率最高; - 空字典直接用
if not dict 判断,简洁高效; - 多键、子集、类型校验等高级判断,结合
all()、集合、isinstance 实现; - 避开
get() 判断键的坑,区分「值为 None」和「键不存在」。