1. 引言

Python 的字典(dict)是一种内建的数据结构,它存储的是键值对(key-value)的映射关系。字典的元素是无序的、可变的,可以高效地根据键进行查找。字典通常用于存储和处理具有映射关系的数据,如学生成绩、用户信息等。


2. 字典的定义与创建

字典是通过花括号 {} 来定义的,键和值通过冒号 : 分隔,多个键值对之间用逗号 , 分隔。

示例:

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}
print(my_dict)  # 输出: {'name': 'Alice', 'age': 25, 'job': 'Engineer'}

# 使用 `dict()` 函数创建字典
my_dict2 = dict(name='Bob', age=30, job='Doctor')
print(my_dict2)  # 输出: {'name': 'Bob', 'age': 30, 'job': 'Doctor'}


3. 字典的基本操作

3.1 访问字典元素

字典通过键来访问对应的值。如果键不存在,会抛出 KeyError

my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}

# 访问元素
print(my_dict['name'])  # 输出: Alice

# 键不存在会抛出 KeyError
# print(my_dict['address'])  # 会报错: KeyError

3.2 使用 get() 方法访问

get() 方法可以安全地访问字典元素。如果键不存在,它不会抛出异常,而是返回 None 或者指定的默认值。

print(my_dict.get('name'))  # 输出: Alice
print(my_dict.get('address', 'Unknown'))  # 输出: Unknown

3.3 添加或更新元素

字典中的值是可变的,既可以修改现有的键值对,也可以新增键值对。

my_dict['address'] = '123 Street'  # 新增键值对
my_dict['age'] = 26  # 更新已有键的值
print(my_dict)
# 输出: {'name': 'Alice', 'age': 26, 'job': 'Engineer', 'address': '123 Street'}

3.4 删除元素

可以使用 del 语句或者 pop() 方法删除字典中的键值对。

# 使用 del 删除元素
del my_dict['address']
print(my_dict)  # 输出: {'name': 'Alice', 'age': 26, 'job': 'Engineer'}

# 使用 pop 删除元素并获取其值
age = my_dict.pop('age')
print(age)  # 输出: 26
print(my_dict)  # 输出: {'name': 'Alice', 'job': 'Engineer'}


4. 字典的方法

方法说明示例
keys()返回字典的所有键my_dict.keys() 返回 dict_keys(['name', 'age', 'job'])
values()返回字典的所有值my_dict.values() 返回 dict_values(['Alice', 25, 'Engineer'])
items()返回字典的所有键值对(元组形式)my_dict.items() 返回 dict_items([('name', 'Alice'), ('age', 25), ('job', 'Engineer')])
clear()清空字典my_dict.clear()
update()用另一个字典更新当前字典my_dict.update({'address': '123 Street'})
popitem()删除并返回字典中的最后一项my_dict.popitem()

示例:

my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}

# 获取所有键
print(my_dict.keys())  # 输出: dict_keys(['name', 'age', 'job'])

# 获取所有值
print(my_dict.values())  # 输出: dict_values(['Alice', 25, 'Engineer'])

# 获取所有键值对
print(my_dict.items())  # 输出: dict_items([('name', 'Alice'), ('age', 25), ('job', 'Engineer')])

# 更新字典
my_dict.update({'address': '123 Street'})
print(my_dict)  # 输出: {'name': 'Alice', 'age': 25, 'job': 'Engineer', 'address': '123 Street'}


5. 字典的遍历

5.1 遍历字典的键

可以使用 for 循环遍历字典中的键。

for key in my_dict:
    print(key)  # 输出:name age job address

5.2 遍历字典的值

通过 values() 方法遍历字典的值。

for value in my_dict.values():
    print(value)  # 输出:Alice 25 Engineer 123 Street

5.3 遍历字典的键值对

通过 items() 方法遍历字典的键值对。

for key, value in my_dict.items():
    print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 25
# job: Engineer
# address: 123 Street


6. 字典的嵌套

字典支持嵌套,可以将字典作为值存储在另一个字典中,这在表示复杂数据结构时非常有用。

nested_dict = {
    'person1': {'name': 'Alice', 'age': 25},
    'person2': {'name': 'Bob', 'age': 30}
}

# 访问嵌套字典
print(nested_dict['person1']['name'])  # 输出: Alice
print(nested_dict['person2']['age'])   # 输出: 30


7. 字典与其他数据结构的对比

特性字典 (Dictionary)列表 (List)元组 (Tuple)
存储方式键值对有序元素有序元素
可变性可变可变不可变
查找效率O(1)O(n)O(n)
索引根据键访问根据索引访问根据索引访问

字典在查找速度上比列表和元组快,尤其在需要频繁进行键值查询的场景中,它的效率优势更为明显。


8. 字典的常见应用场景

  • 存储配置参数:字典常用于存储和读取程序中的配置信息,如数据库配置、应用设置等。
  • 计数器:字典用于统计出现次数。例如,统计一段文本中单词出现的次数。
  • 映射数据:字典是实现键值对映射关系的理想结构,如存储用户信息、电话号码簿等。

示例:计算文本中单词的出现次数

text = "apple orange apple banana orange apple"
word_count = {}

for word in text.split():
    word_count[word] = word_count.get(word, 0) + 1

print(word_count)
# 输出: {'apple': 3, 'orange': 2, 'banana': 1}


9. 结论

字典是 Python 中非常重要的内建数据结构,它以键值对的形式存储数据,支持快速查找。与列表和元组不同,字典是无序的且不可通过索引访问元素,而是通过键来获取对应的值。掌握字典的基本操作和方法,可以帮助你更高效地处理和存储数据。


常见问题解答:

  • 字典的键可以是哪些数据类型?
    • 字典的键必须是不可变类型(如字符串、数字、元组),可以是任何哈希值的对象。
  • 如何避免字典中的键重复?
    • 字典的键是唯一的,如果使用相同的键再次添加值,会更新原有键对应的值,而不是增加新的键值对。

🚀 练习一下! 现在你已经学会了字典的基本操作,试着在实际编程中使用字典来存储和查找数据吧!