推理基础设施 · Python2.4 字典推导式
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

💡 思路提示

点开看提示
  1. 形如 {key表达式: value表达式 for item in list}
  2. item["name"] 是键,item["size_gb"] 是值
  3. 可以直接 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 或者手动检查)