Python 里说”list 转 map”通常指的是把列表变成字典(dict)。到底怎么转,取决于原始 list 长什么样。
1. 两个平行 list 转 dict
keys 和 values 是分开的两列:
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 + values | dict(zip(keys, values)) |
[(k, v), ...] | dict(data) |
[{...}, ...] 按字段 | {u[key]: u for u in list} |
| 对每个元素求值 | [f(x) for x in list] |
| 统计次数 | Counter(list) |
