02
列表 / 字典操作 · 4 / 6
2.4 字典推导式
💡 把一个 list 转成 {id: request} 的索引是推理 batching 的常见起手式
2.4 字典推导式
语法
{k表达式: v表达式 for 变量 in 可迭代对象 if 条件}
names = ["alice", "bob", "carol"]
upper = {n: n.upper() for n in names}
# {'alice': 'ALICE', 'bob': 'BOB', 'carol': 'CAROL'}
# 实战:从请求列表建索引
requests = [{"id": 1, "p": "hi"}, {"id": 2, "p": "hello"}]
by_id = {r["id"]: r for r in requests}
by_id[1] # {"id": 1, "p": "hi"}
示范
requests = [
{"id": 1, "tokens": 32},
{"id": 2, "tokens": 128},
{"id": 3, "tokens": 64},
]
by_id = {r["id"]: r for r in requests}
print(by_id[2]) # {"id": 2, "tokens": 128}
✍️ 练习
输入:
samples = [
{"name": "qwen2.5-7b", "size_gb": 14},
{"name": "qwen2.5-72b", "size_gb": 140},
{"name": "llama3-8b", "size_gb": 16},
]
用字典推导式生成一个 dict:键是 name,值是 size_gb。然后打印 result["qwen2.5-72b"],期望输出 140。
💡 思路提示
点开看提示
- 形如
{key表达式: value表达式 for item in list} item["name"]是键,item["size_gb"]是值- 可以直接
print(dict["key"])看值
✅ 参考解法
写不出来再打开
samples = [
{"name": "qwen2.5-7b", "size_gb": 14},
{"name": "qwen2.5-72b", "size_gb": 140},
{"name": "llama3-8b", "size_gb": 16},
]
result = {s["name"]: s["size_gb"] for s in samples}
print(result["qwen2.5-72b"])
🔍 进阶思考
如果同一个 name 出现两次会怎样?
- 答:后者覆盖前者
- 生产代码里通常需要去重(用
set或者手动检查)