Python list 转 dict/map 的五种常见姿势

Python 里说”list 转 map”通常指的是把列表变成字典(dict)。到底怎么转,取决于原始 list 长什么样。

1. 两个平行 list 转 dict

keysvalues 是分开的两列:

keys   = ["a", "b", "c"]
values = [1, 2, 3]

m = dict(zip(keys, values))
# {'a': 1, 'b': 2, 'c': 3}

2. 二元组 list 转 dict

已经是 (key, value) 对:

data = [("a", 1), ("b", 2), ("c", 3)]
m = dict(data)
# {'a': 1, 'b': 2, 'c': 3}

3. 字典 list 按字段索引(最常用)

后端返回一堆对象,前端要按 ID 查——最典型场景:

users = [
    {"id": 1, "name": "Tom"},
    {"id": 2, "name": "Jack"},
    {"id": 3, "name": "Lucy"},
]

m = {u["id"]: u for u in users}

m[2]
# {'id': 2, 'name': 'Jack'}

如果 key 会重复,改成分组:

from collections import defaultdict

groups = defaultdict(list)
for u in users:
    groups[u["dept"]].append(u)

4. Python 内建 map() 函数

如果说的是 map() 而不是”映射”:

nums = [1, 2, 3, 4]
result = list(map(lambda x: x * 2, nums))
# [2, 4, 6, 8]

更 Pythonic 的写法是列表推导:

result = [x * 2 for x in nums]

5. 统计次数

Counter

from collections import Counter

lst = ["a", "b", "a", "c", "a"]
Counter(lst)
# Counter({'a': 3, 'b': 1, 'c': 1})

记忆表

输入形态用法
两列 keys + valuesdict(zip(keys, values))
[(k, v), ...]dict(data)
[{...}, ...] 按字段{u[key]: u for u in list}
对每个元素求值[f(x) for x in list]
统计次数Counter(list)