侧边栏壁纸
博主头像
phphi

phphi's blog

  • 累计撰写 51 篇文章
  • 累计收到 0 条评论

Day13 - 常用数据结构之字典

2026-4-24 / 0 评论 / 1 阅读

常用数据结构之字典

字典基础

字典(dictionary)以键值对形式存储数据,通过键快速找到对应的值,就像查《新华字典》——键是字,值是解释。

person = {
    'name': '王大锤',
    'age': 55,
    'height': 168,
    'weight': 60,
    'addr': '成都市武侯区'
}

创建字典

# 字面量
person = {'name': '王大锤', 'age': 55}

# dict构造器
person = dict(name='王大锤', age=55)

# zip压缩两个序列
d = dict(zip('ABC', '123'))     # {'A': '1', 'B': '2', 'C': '3'}

# 生成式
d = {x: x**3 for x in range(1, 6)}  # {1: 1, 2: 8, 3: 27, 4: 64, 5: 125}

# 空字典
empty = {}     # 这是字典
empty = dict() # 也是字典

注意:字典的键必须是不可变类型(intstrtuple),不能用 listsetdict

字典运算

person = {'name': '王大锤', 'age': 55, 'height': 168}

# 成员运算(判断键是否存在)
print('name' in person)   # True
print('tel' in person)    # False

# 索引访问(键不存在会抛KeyError)
print(person['name'])     # 王大锤

# 添加/修改
person['age'] = 25         # 修改已有键
person['tel'] = '131xxxx' # 添加新键值对

字典方法

person = {'name': '王大锤', 'age': 55, 'height': 178}

# 安全获取(键不存在返回None或默认值)
print(person.get('name'))      # 王大锤
print(person.get('sex'))       # None
print(person.get('sex', '未知')) # 未知

# 获取键/值/键值对
print(person.keys())    # dict_keys(['name', 'age', 'height'])
print(person.values())  # dict_values(['王大锤', 55, 178])
print(person.items())   # dict_items([('name', '王大锤'), ...])

# 遍历
for key, value in person.items():
    print(f'{key}: {value}')

# 更新/合并(Python 3.9+可用 |=)
person.update({'age': 26, 'city': '成都'})
person |= {'city': '成都', 'city2': '北京'}

# 删除
person.pop('age')       # 删除并返回值
person.popitem()        # 弹出最后一组键值对
person.clear()          # 清空
del person['height']    # del关键字删除

应用实例

统计字母出现频率

sentence = input('请输入一段话: ')
counter = {}
for ch in sentence:
    if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':
        counter[ch] = counter.get(ch, 0) + 1

# 按出现次数排序输出
for key in sorted(counter, key=counter.get, reverse=True):
    print(f'{key} 出现了 {counter[key]} 次')

字典生成式筛选

stocks = {
    'AAPL': 191.88,
    'GOOG': 1186.96,
    'IBM': 149.24,
    'ORCL': 48.44,
    'ACN': 166.89,
    'FB': 208.09
}
# 筛选股价大于100的股票
high_price = {k: v for k, v in stocks.items() if v > 100}
print(high_price)
# {'AAPL': 191.88, 'GOOG': 1186.96, 'IBM': 149.24, 'ACN': 166.89, 'FB': 208.09}

总结

  • 字典以键值对存储数据,键查找 O(1) 复杂度,非常高效
  • 键必须是不可变类型,值可以是任意类型
  • 常用方法:get() 安全访问、update() 合并、pop() 删除
  • 字典生成式是筛选和转换数据的利器