python---字典(dict)

文章目录

  • [1. 字典的基本特性](#1. 字典的基本特性)
  • [2. 创建字典](#2. 创建字典)
  • [3. 字典操作](#3. 字典操作)
  • [4. 常用方法](#4. 常用方法)
  • [5. 字典推导式](#5. 字典推导式)
  • [6. 查找键值是否存在](#6. 查找键值是否存在)
    • [1. 使用 in 关键字(推荐)](#1. 使用 in 关键字(推荐))
    • [2. 使用 get() 方法](#2. 使用 get() 方法)
    • [3. 使用 keys() 方法](#3. 使用 keys() 方法)
    • [4. 使用 try-except 块](#4. 使用 try-except 块)
    • 性能比较
  • [7. 特殊字典类型](#7. 特殊字典类型)
  • [8. 注意事项](#8. 注意事项)
  • [9. 应用场景](#9. 应用场景)

字典(dict)是 Python 中最重要、最常用的内置数据结构之一,用于存储 键值对(key-value pairs) 数据。

1. 字典的基本特性

1、无序集合(Python 3.7+ 后按插入顺序保存)

2、可变(可动态增删改)

3、键必须唯一且不可变(如字符串、数字、元组)

4、值可以是任意类型(包括其他字典)

2. 创建字典

bash 复制代码
# 方式1:花括号
d1 = {'name': 'Alice', 'age': 25}

# 方式2:dict()构造函数
d2 = dict(name='Bob', age=30)

# 方式3:键值对列表
d3 = dict([('name', 'Charlie'), ('age', 35)])

# 空字典
empty_dict = {}

3. 字典操作

访问元素

bash 复制代码
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

添加/修改元素

bash 复制代码
person['age'] = 26      # 修改
# city是原本没有的键
person['city'] = 'NY'   # 新增

删除元素

bash 复制代码
del person['city']      # 删除键值对
age = person.pop('age') # 删除并返回值
person.clear()          # 清空字典

4. 常用方法

方法 描述
keys() 返回所有键
values() 返回所有值
items() 返回所有键值对
update() 合并字典
setdefault() 安全获取/设置值
popitem() 移除最后插入的项
bash 复制代码
person = {'name': 'Alice', 'age': 25}

# 遍历
for key in person: ...
for value in person.values(): ...
for key, value in person.items(): ...

# 合并字典
extra_info = {'city': 'NY', 'job': 'Engineer'}
person.update(extra_info)

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. 字典推导式

类似列表推导式:

bash 复制代码
squares = {x: x*x for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

6. 查找键值是否存在

1. 使用 in 关键字(推荐)

bash 复制代码
my_dict = {'name': 'Alice', 'age': 25}

if 'name' in my_dict:
    print("键 'name' 存在")  # 会执行

if 'gender' not in my_dict:
    print("键 'gender' 不存在")  # 会执行

2. 使用 get() 方法

bash 复制代码
my_dict = {'name': 'Alice', 'age': 25}

# 如果键存在,返回对应的值;不存在则返回None(或指定的默认值)
value = my_dict.get('name')
if value is not None:
    print(f"键 'name' 存在,值为 {value}")

3. 使用 keys() 方法

bash 复制代码
my_dict = {'name': 'Alice', 'age': 25}

if 'age' in my_dict.keys():
    print("键 'age' 存在")

4. 使用 try-except 块

bash 复制代码
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数据处理、配置存储。