python---字典(dict)
文章目录
字典(dict)是 Python 中最重要、最常用的内置数据结构之一,用于存储 键值对(key-value pairs) 数据。
1. 字典的基本特性
1、无序集合(Python 3.7+ 后按插入顺序保存)
2、可变(可动态增删改)
3、键必须唯一且不可变(如字符串、数字、元组)
4、值可以是任意类型(包括其他字典)
2. 创建字典
# 方式1:花括号 d1 ={'name':'Alice', 'age':25}# 方式2:dict()构造函数 d2 = dict(name='Bob', age=30)# 方式3:键值对列表 d3 = dict([('name', 'Charlie'), ('age', 35)])# 空字典 empty_dict ={}3. 字典操作
访问元素
person ={'name':'Alice', 'age':25}# 获取值 print(person['name'])# 'Alice'# 使用get()方法(避免KeyError) print(person.get('age'))# 25 print(person.get('height'))# None print(person.get('height', 170))# 默认值170添加/修改元素
person['age']=26# 修改# city是原本没有的键 person['city']='NY'# 新增删除元素
del person['city']# 删除键值对 age = person.pop('age')# 删除并返回值 person.clear()# 清空字典4. 常用方法
| 方法 | 描述 |
|---|---|
| keys() | 返回所有键 |
| values() | 返回所有值 |
| items() | 返回所有键值对 |
| update() | 合并字典 |
| setdefault() | 安全获取/设置值 |
| popitem() | 移除最后插入的项 |
| len() | 返回字典中 键值对(key-value pairs)的数量 |
person ={'name':'Alice', 'age':25}# 遍历forkeyin person: ... forvaluein person.values(): ... for key, value in person.items(): ... # 合并字典 extra_info ={'city':'NY', 'job':'Engineer'} person.update(extra_info) my_dict ={'a':1, 'b':2, 'c':3}# 计算字典的长度(键值对数量) print(len(my_dict))# 输出: 3# 空字典的情况 empty_dict ={} print(len(empty_dict))# 输出: 0items详细介绍
在 Python 中,字典(dict)的 items() 方法返回一个 视图对象(dict_items 类型),它包含字典中所有的键值对((key, value) 元组)。这个视图是动态的,会反映字典的实时变化。
tuple1 = person.items() print(tuple1)# items返回值是实时变化的 person['city']='NY' print(tuple1)输出结果:
dict_items([('name', 'Alice'), ('age', 25)]) dict_items([('name', 'Alice'), ('age', 25), ('city', 'NY')])pop和popitem的区别
这两个方法都用于从字典中移除并返回元素,但有重要区别:
pop(key[, default])
1、移除指定键的元素并返回其值
2、必须指定要移除的键,如果键不存在:
2.1、不提供默认值:引发 KeyError
2.2、提供默认值:返回默认值而不报错
popitem()
1、移除并返回最后插入的键值对 (Python 3.7+),在 Python 3.6 及之前版本,popitem() 移除的是随机项,不是最后插入的
2、不需要参数
3、字典为空时引发 KeyError
4、返回形式为 (key, value) 元组
主要区别总结
| 特性 | pop() | popitem() |
|---|---|---|
| 参数需求 | 必须指定key | 不需要参数 |
| 返回值 | 只返回值 | 返回(key, value)元组 |
| 空字典行为 | 键不存在时可能报错 | 必定报错 |
| 移除位置 | 指定键 | 最后插入的项(LIFO) |
| Python版本影响 | 所有版本行为一致 | 3.7+才保证LIFO顺序 |
| 典型用途 | 移除特定元素 | 实现栈/缓存淘汰 |
setdefault方法
setdefault用于获取字典中指定键的值,如果键不存在,则会设置默认值并返回该默认值。
setdefalut与get的区别
get()方法在键不存在时返回默认值但不会修改字典
setdefault()方法在键不存在时会修改字典,添加键值对
5. 字典推导式
类似列表推导式:
squares ={x: x*x forxin range(5)}# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}6. 查找键值是否存在
1. 使用 in 关键字(推荐)
my_dict ={'name':'Alice', 'age':25}if'name'in my_dict: print("键 'name' 存在")# 会执行if'gender' not in my_dict: print("键 'gender' 不存在")# 会执行2. 使用 get() 方法
my_dict ={'name':'Alice', 'age':25}# 如果键存在,返回对应的值;不存在则返回None(或指定的默认值) value = my_dict.get('name')if value is not None: print(f"键 'name' 存在,值为 {value}")3. 使用 keys() 方法
my_dict ={'name':'Alice', 'age':25}if'age'in my_dict.keys(): print("键 'age' 存在")4. 使用 try-except 块
my_dict ={'name':'Alice', 'age':25} try: value = my_dict['gender'] except KeyError: print("键 'gender' 不存在")性能比较
1、in 操作符是最快和最Pythonic的方式
2、get() 方法在需要同时获取值时很方便
3、keys() 方法在Python 3中与直接使用in性能相同(因为keys()返回的是视图对象)
4、try-except 适用于预期键通常存在的情况
7. 特殊字典类型
collections模块中的特殊类型,有兴趣可以自己去搜索,博主在这里就不带着大家一块学习了。
collections.defaultdict:带默认值的字典
collections.OrderedDict:保持插入顺序的字典
collections.Counter:计数器专用字典
8. 注意事项
1、检查键是否存在:if key in dict 比 try-except 更高效
2、字典键必须是可哈希的(不可变类型)
3、Python 3.7+ 中字典保持插入顺序
4、不允许用下表查找
9. 应用场景
如JSON数据处理、配置存储。