常用数据结构之字典
基础教学 1 min read

常用数据结构之字典

Blog Author

常用数据结构之字典(Dictionary)


什么是字典(Dictionary)

**字典(dict)**是 Python 中非常重要的数据结构之一,它以“键值对(key-value)”的形式来组织和存储数据。与列表、元组、集合相比,字典具有更强的“语义性”和“检索效率”,适合用来描述具有多个属性的对象,或者快速查找、映射、计数等任务。

字典的结构类似于现实生活中的《新华字典》:“字”是键,“解释”是值


适用场景

✅ 场景1:描述现实中的实体对象

person = {
    'name': '王大锤',
    'age': 55,
    'height': 168,
    'weight': 60,
    'addr': '成都市武侯区科华北路62号1栋101',
    'tel': '13122334455',
    'emergency_contact': '13800998877'
}

最佳实践:用字典保存实体对象的多个属性,避免用列表或元组带来的索引混乱。


字典的创建方法

方法1:使用花括号 {} 和冒号 :

xinhua = {'麓': '山脚下', '蕗': '甘草的别名'}

方法2:使用 dict() 构造器

person = dict(name='王大锤', age=55, height=168)

方法3:使用 zip() 函数压缩两个列表/元组

codes = dict(zip('ABCDE', range(1, 6)))

方法4:字典推导式(生成式)

squares = {x: x**2 for x in range(1, 6)}

字典的基本操作

查看长度

len(person)  # 返回键值对的数量

索引访问(取值、赋值、添加)

person['age']           # 访问键为 'age' 的值
person['age'] = 30      # 修改值
person['gender'] = '男'  # 添加新的键值对

键是否存在(成员运算)

'name' in person        # True
'tel' in person         # False

遍历字典

遍历键

for key in person:
    print(key)

遍历值

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

遍历键值对

for key, value in person.items():
    print(f'{key}:\t{value}')

字典的常用方法与用法示例

方法名 功能说明 示例
get(key, default) 获取指定键的值,如果不存在则返回默认值 person.get('sex', '未知')
keys() 返回所有键(可迭代) person.keys()
values() 返回所有值(可迭代) person.values()
items() 返回所有键值对(二元组) person.items()
update(dict2) 合并另一个字典,重复键会更新 person.update({'age': 30})
pop(key) 删除指定键,并返回它的值 person.pop('age')
popitem() 随机删除一个键值对,返回的是(key, value)元组 person.popitem()
clear() 清空整个字典 person.clear()
del dict[key] 删除指定键对应的数据,键不存在则抛异常 del person['addr']

字典中的键必须是不可变类型

可作为键的类型包括:

  • 整型(int)
  • 字符串(str)
  • 元组(tuple,内容不可变)

不可作为键的类型包括:

  • 列表(list)
  • 集合(set)
  • 字典(dict)

✅ 示例(正确):

d = {(1, 2): '坐标', 'name': 'Alice'}

❌ 示例(错误):

d = {[1, 2]: '非法键'}  # 报错:unhashable type: 'list'

字典的嵌套使用与结构建模

字典可以嵌套字典、列表等数据结构来描述更复杂的数据:

person = {
    'name': '王大锤',
    'addr': ['成都', '北京'],
    'car': {
        'brand': 'BMW',
        'specs': {'length': 5170, 'width': 2000}
    }
}

实战案例:字典的经典应用场景

案例1:英文字符统计器(频率统计)

sentence = input("请输入英文段落: ")
counter = {}
for ch in sentence:
    if ch.isalpha():
        counter[ch] = counter.get(ch, 0) + 1
for k in sorted(counter, key=counter.get, reverse=True):
    print(f'{k}: {counter[k]}')

使用场景:统计类、数据可视化、文本分析。


案例2:筛选高股价股票

stocks = {
    'AAPL': 191.88, 'GOOG': 1186.96, 'IBM': 149.24,
    'ORCL': 48.44, 'ACN': 166.89, 'FB': 208.09
}
expensive = {k: v for k, v in stocks.items() if v > 100}
print(expensive)

使用场景:数据筛选、条件映射、过滤处理。


最佳实践建议

  1. 使用语义化的键名:不要用 'a1'、'b2' 之类的无意义键名。
  2. 使用 get() 获取值更安全:避免 KeyError 异常。
  3. 结合字典推导式使用过滤与转换逻辑
  4. 字典适合做映射、存储配置项、实体建模、统计分析
  5. 结合 JSON 存储与读取更强大:字典是 JSON 的天然数据结构。

总结回顾

  • 字典是 Python 中最强大的数据结构之一。
  • 它支持键值对的形式,键必须是不可变类型
  • 可以用于实体建模、数据映射、统计、嵌套结构。
  • 掌握字典的各种创建方式、访问技巧和方法操作,是成为中级 Python 开发者的必经之路。

📌 一句话总结

字典让数据结构变得更有语义、更易读写、更适合组织和查询现实世界中的复杂信息。

如需进一步学习,请结合项目实战中使用字典的情景来练习,如用户信息管理系统、成绩统计器、JSON 配置加载等场景。