items / keys / values

d = {"name": "WadeLy", "age": 30, "city": "深圳"}

list(d.keys())     # ['name', 'age', 'city']
list(d.values())   # ['WadeLy', 30, '深圳']
list(d.items())    # [('name', 'WadeLy'), ('age', 30), ('city', '深圳')]

items() 返回的是键值对元组——遍历最常用:

for k, v in d.items():
    print(f"{k} = {v}")

合并字典

a = {"x": 1, "y": 2}
b = {"y": 20, "z": 30}

# Python 3.9+ 直接用 |
merged = a | b              # {'x': 1, 'y': 20, 'z': 30}(b 覆盖 a)

# 兼容老版本
merged = {**a, **b}          # 同上
a.update(b)                  # 原地更新 a

嵌套字典:表达 JSON 数据

user = {
    "name": "WadeLy",
    "profile": {
        "age": 30,
        "city": "深圳",
        "skills": ["Python", "Unity"]
    },
    "active": True
}

print(user["profile"]["city"])             # 深圳
print(user["profile"]["skills"][0])        # Python

这就是 JSON 在 Python 里的样子。

setdefault:键不存在就插入

counts = {}
words = ["a", "b", "a", "c", "b", "a"]
for w in words:
    counts.setdefault(w, 0)
    counts[w] += 1
print(counts)    # {'a': 3, 'b': 2, 'c': 1}

更优雅的写法用 collections.Counter

from collections import Counter
counts = Counter(words)    # 一行搞定

defaultdict:自动创建默认值

from collections import defaultdict
groups = defaultdict(list)
data = [("水果", "苹果"), ("水果", "橘子"), ("蔬菜", "白菜")]
for cat, item in data:
    groups[cat].append(item)
print(dict(groups))
# {'水果': ['苹果', '橘子'], '蔬菜': ['白菜']}

字典推导式

squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# 反转键值
d = {"a": 1, "b": 2}
inv = {v: k for k, v in d.items()}    # {1: 'a', 2: 'b'}

下一篇讲集合 Set——专治去重和成员检查。