6. 字典

字典以键值对形式存储数据,通过键快速查找值。键必须是不可变类型(字符串、数字、元组),值可以是任意类型。

python
# 创建字典
person = {
    'name': '王大锤',
    'age': 25,
    'addr': '成都市武侯区'
}

# 用 dict() 或 zip() 创建
person2 = dict(name='张三', age=30)
items = dict(zip(['A', 'B', 'C'], [1, 2, 3]))

# 访问与修改
print(person['name'])       # 王大锤
person['age'] = 26          # 修改
person['tel'] = '138...'    # 新增键值对

# get() 方法:键不存在时返回默认值,不报错
print(person.get('sex'))         # None
print(person.get('sex', '未知'))  # 未知

▶ 运行结果:

输出
王大锤
None
未知

字典方法

方法说明
keys()返回所有键
values()返回所有值
items()返回所有键值对(二元组)
get(key, default)安全获取值,键不存在返回 default
update(d)合并另一个字典
pop(key)删除键值对并返回值
popitem()删除并返回最后一个键值对

遍历字典

python
# 遍历键
for key in person:
    print(key, person[key])

# 遍历键值对(推荐)
for key, value in person.items():
    print(f'{key}: {value}')

实战:字母频率统计

python
sentence = input('请输入一段话:')
counter = {}
for ch in sentence:
    if ch.isalpha():
        counter[ch] = counter.get(ch, 0) + 1
# 按出现次数从高到低排序输出
for key in sorted(counter, key=counter.get, reverse=True):
    print(f'{key} 出现了 {counter[key]} 次')
💡 get() 的妙用

counter.get(ch, 0) + 1 一行完成"如果键存在则加1,不存在则初始化为1"。比写 if ch in counter 判断更简洁。

实战:字典生成式筛选数据

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

▶ 运行结果:

输出
{'AAPL': 191.88, 'GOOG': 1186.96, 'IBM': 149.24, 'ACN': 166.89, 'FB': 208.09}