02_字典
字典/哈希表
d = {}
# 创建
person = {"name": "Alice", "age": 25}
# 访问
person["name"] # 'Alice'
d.get(key, default) # 获取值,不存在返回 default
# 直接赋值(key 存在则修改,不存在则添加)
d[key] = value
# 增量赋值
d[key] = d.get(key, 0) + value
del d[key] # 删除指定键(不存在时抛异常)
clear() # 清空字典
# 检查键是否存在
if key in d: ...
# 计数器:统计字符出现次数
from collections import Counter
cnt = Counter(arr)
cnt.values() # 获取所有出现次数的值(dict_values 类型)
min(cnt.values()) # 获取最小出现次数
max(cnt.values()) # 获取最大出现次数
# keys():返回所有键的视图(可迭代)
# values():返回所有值的视图
# items():返回所有 (键, 值) 对的视图
for k in d.keys(): ...
for v in d.values(): ...
for k, v in d.items(): ...按键排序:
sorted(d.items())按值排序:
sorted(d.items(), key=lambda x: x[1])获取值最小的键:
min(d, key=d.get)
defaultdict
from collections import defaultdict
# int 默认值:计数
d = defaultdict(int)
d["a"] += 1 # 不需要先判断键是否存在
# list 默认值:分组
d = defaultdict(list)
d["a"].append(1) # 自动创建空列表
# 常用场景
# 1. 计数
s = "abracadabra"
cnt = defaultdict(int)
for char in s:
cnt[char] += 1 # 不需要先判断键是否存在
# {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
# 2. 分组
words = ["apple", "banana", "apricot"]
group = defaultdict(list)
for w in words:
group[w[0]].append(w)
# {'a': ['apple', 'apricot'], 'b': ['banana']}