Python3 字典详解

在 Python3 中,字典(Dictionary)是一种无序、可变且键唯一的数据结构,用于存储键值对(key-value pairs)。字典是 Python 中最强大的数据类型之一,广泛应用于数据处理、配置管理和算法实现等场景。以下是 Python3 字典的详细介绍:

一、字典基础

1. 定义字典

使用花括号{}或内置函数dict()定义:
 
# 空字典
empty_dict = {}
empty_dict = dict()

# 带键值对的字典
person = {
    'name': 'Alice',
    'age': 30,
    'city': 'New York',
    'skills': ['Python', 'Java']
}

# 使用dict()构造函数
scores = dict(math=90, english=85, science=95)
 

2. 字典特点

  • 键唯一性:同一字典中,键必须唯一,重复的键会覆盖原有值。
  • 键不可变性:键必须是不可变类型(如字符串、数字、元组),列表等可变类型不能作为键。
  • 值任意性:值可以是任意类型,包括列表、字典等复合类型。
  • 无序性:Python 3.7 + 中,字典保持插入顺序,但本质仍是无序的。

二、字典操作

1. 访问元素

通过键获取对应的值,若键不存在会引发KeyError
 
person = {'name': 'Alice', 'age': 30}

# 直接访问
print(person['name'])  # 输出: Alice

# 使用get()方法,键不存在时返回默认值
print(person.get('city', 'Unknown'))  # 输出: Unknown
 

2. 修改和添加元素

# 修改现有键的值
person['age'] = 31

# 添加新键值对
person['job'] = 'Engineer'

# 使用update()方法批量添加/更新
person.update({'city': 'Los Angeles', 'hobbies': ['reading', 'swimming']})
 

3. 删除元素

# 删除指定键值对
del person['job']

# 删除并返回指定键的值
age = person.pop('age')

# 随机删除并返回一个键值对(Python 3.7+返回最后插入的)
item = person.popitem()

# 清空字典
person.clear()
 

三、字典遍历

1. 遍历键

for key in person.keys():
    print(key)
 

2. 遍历值

for value in person.values():
    print(value)
 

3. 遍历键值对

for key, value in person.items():
    print(f"{key}: {value}")
 

四、字典方法

1. 常用方法

方法描述
keys() 返回包含所有键的视图对象。
values() 返回包含所有值的视图对象。
items() 返回包含所有键值对的视图对象。
get(key, default) 返回指定键的值,若键不存在则返回默认值。
pop(key[, default]) 删除指定键并返回其值,若键不存在则返回默认值(若无默认值则报错)。
popitem() 随机删除并返回一个键值对(Python 3.7 + 返回最后插入的)。
update(other_dict) 用另一个字典的键值对更新当前字典(存在则覆盖,不存在则添加)。
clear() 清空字典所有元素。
copy() 返回字典的浅拷贝。

2. 示例代码

 
# 浅拷贝示例
original = {'a': [1, 2], 'b': 3}
copy = original.copy()

original['a'].append(3)
print(copy['a'])  # 输出: [1, 2, 3](浅拷贝只复制一层)
 

五、字典推导式

用于快速创建字典:
 
# 创建平方数字典
squares = {x: x**2 for x in range(5)}
# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 筛选字典元素
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
# 输出: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
 

六、嵌套字典

字典中包含字典,用于表示复杂数据结构:
 
 
employees = {
    'emp1': {'name': 'Alice', 'salary': 80000},
    'emp2': {'name': 'Bob', 'salary': 75000},
    'emp3': {'name': 'Charlie', 'salary': 90000}
}

# 访问嵌套元素
print(employees['emp2']['name'])  # 输出: Bob

# 修改嵌套元素
employees['emp3']['salary'] = 95000
 

七、字典排序

1. 按键排序

d = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(d.items()))
# 输出: {'a': 1, 'b': 2, 'c': 3}
 

2. 按值排序

sorted_dict = dict(sorted(d.items(), key=lambda item: item[1]))
# 输出: {'a': 1, 'b': 2, 'c': 3}
 

八、性能特点

字典基于哈希表实现,具有以下性能特性:

  • 插入 / 删除 / 查找:平均时间复杂度为 O (1),但最坏情况下为 O (n)(哈希冲突严重时)。
  • 空间效率:字典的空间开销较大,适合存储少量关键数据。
  • 哈希冲突:键的哈希值相同时会发生冲突,Python 使用开放寻址法解决冲突。

九、与其他数据结构的对比

数据结构有序性可变性键唯一性访问方式典型应用场景
字典 无序 可变 快速查找、配置管理
列表 有序 可变 索引 序列数据处理
元组 有序 不可变 索引 不可变数据存储
集合 无序 可变 去重、成员测试

十、常见应用场景

1. 数据统计

 
# 统计字符频率
text = "hello world"
freq = {}
for char in text:
    freq[char] = freq.get(char, 0) + 1
print(freq)  # 输出: {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
 

2. 配置管理

config = {
    'host': 'localhost',
    'port': 3306,
    'user': 'admin',
    'password': 'secret',
    'database': 'mydb'
}

# 读取配置
print(f"Connecting to {config['host']}:{config['port']}")
 

3. 映射转换

 
# 数字到中文映射
num_to_chinese = {
    0: '零', 1: '一', 2: '二', 3: '三', 4: '四',
    5: '五', 6: '六', 7: '七', 8: '八', 9: '九'
}

# 转换数字
print(num_to_chinese[5])  # 输出: 五

十一、总结

  • 核心特性:键值对存储、键唯一且不可变、无序(3.7 + 保持插入顺序)。
  • 优势:快速查找(O (1) 时间复杂度)、灵活的数据结构。
  • 注意事项:避免使用可变对象作为键,大字典会占用较多内存。

字典是 Python 中最常用的数据结构之一,掌握其操作和特性对于编写高效、简洁的代码至关重要。合理使用字典可以显著提升程序的性能和可读性。

posted on 2025-06-23 10:23  小陶coding  阅读(132)  评论(0)    收藏  举报