02
列表 / 字典操作 · 5 / 6
2.5 嵌套结构:推理请求的"俄罗斯套娃"
💡 推理请求体几乎都是嵌套 dict + list:messages[].content、sampling_params、logprobs...
2.5 嵌套结构
核心就是 list 和 dict 互相套
req = {
"model": "qwen2.5-7b",
"messages": [
{"role": "system", "content": "You are helpful"},
{"role": "user", "content": "hi"},
],
"sampling": {"temperature": 0.7, "top_p": 0.9},
}
访问套路:一层一层往里取
req["messages"]→ listreq["messages"][0]→ 第一个 dictreq["messages"][0]["role"]→"system"req["sampling"]["temperature"]→0.7
安全访问
每一层都可能不存在:
req.get("sampling", {}).get("temperature", 0.7)
.get("sampling", {}):如果不存在,返回空 dict,下一层 .get 也不会报错。
示范
req = {
"model": "qwen2.5-7b",
"messages": [
{"role": "system", "content": "You are helpful"},
{"role": "user", "content": "hi"},
],
"sampling": {"temperature": 0.7, "top_p": 0.9},
}
print(req["messages"][-1]["content"]) # hi
print(req.get("sampling", {}).get("temperature")) # 0.7
✍️ 练习
给定上面 req,写代码做两件事:
- 数一下
messages里有几条消息(提示:用len) - 用一行表达式(不抛
KeyError)取出sampling.top_k,不存在就用50
把两个结果都 print 出来。
💡 思路提示
点开看提示
len(req["messages"])数列表长度- 链式
.get:req.get("sampling", {}).get("top_k", 50) - 如果
sampling字段可能不存在,第二个参数{}就让它返回空 dict
✅ 参考解法
写不出来再打开
req = {
"model": "qwen2.5-7b",
"messages": [
{"role": "system", "content": "You are helpful"},
{"role": "user", "content": "hi"},
],
"sampling": {"temperature": 0.7, "top_p": 0.9},
}
print(len(req["messages"]))
print(req.get("sampling", {}).get("top_k", 50))
🔍 进阶思考
多层嵌套很深时,可以写个工具函数:
def dig(d, *keys, default=None):
for k in keys:
if isinstance(d, dict) and k in d:
d = d[k]
else:
return default
return d
print(dig(req, "sampling", "top_k", default=50)) # 50
避免重复写 .get 链。