主题
02 · 数据结构
Agent 最常操作的数据是「一组消息」。本课直接围绕它学 list 和 dict。
list:类似 Array
python
messages = ["你好", "我是助手"]
messages.append("帮我学习 Python") # push
print(messages[0]) # 你好
print(messages[-1]) # 最后一项
print(len(messages)) # 3
print(messages[:2]) # 前两项,不包含索引 2
print(messages[-2:]) # 最后两项
last = messages.pop() # 删除并返回最后一项切片写作 [start:end:step],边界不包含 end,省略表示从头或到尾。切片生成新的浅拷贝 list,内层对象仍共享引用。
dict:类似 Object / Map
python
message = {"role": "user", "content": "你好"}
print(message["content"])
message["content"] = "帮我学习 Python"
print(message.get("tool_calls")) # 缺失返回 None
print(message.get("tokens", 0)) # 缺失返回默认值
for key, value in message.items():
print(key, value)和 JS Object 不同
dict 不能写 message.content。访问不存在的 message["missing"] 会抛出 KeyError,不会返回 undefined。处理可能缺失的字段用 .get()。
合起来就是 API 消息
python
messages = [
{"role": "system", "content": "你是 Python 老师"},
{"role": "user", "content": "解释一下 list"},
]
messages.append({"role": "assistant", "content": "list 是有序的可变集合"})
for message in messages:
print(f"{message['role']}: {message['content']}")后面大模型 API 的 messages= 接收的就是类似这样的结构。
推导式:map + filter
js
const users = [{ name: 'Lin', age: 25 }, { name: 'Mo', age: 16 }]
const names = users.filter(u => u.age >= 18).map(u => u.name)python
users = [{"name": "Lin", "age": 25}, {"name": "Mo", "age": 16}]
names = [u["name"] for u in users if u["age"] >= 18]
print(names) # ['Lin']读法:对 users 中每个 u,满足条件时取 u 的 name。太复杂时直接写普通循环,可读性优先。
tuple 和 set
python
point = (10, 20) # tuple,不可变序列
x, y = point # 解包,类似 destructuring
unique = {"Python", "AI", "Python"} # set,去重、无稳定展示顺序
print(len(unique)) # 2
unique.add("Agent")
print("AI" in unique) # True空 set 必须是 set();{} 是空 dict。给只有一项的 tuple 加逗号:("hello",)。
JSON 与 Python 对象不是同一回事
JSON 是传输用的文本格式,dict/list 是内存里的对象。
python
import json
raw = '{"enabled": true, "value": null}'
data = json.loads(raw) # 类似 JSON.parse()
print(data) # {'enabled': True, 'value': None}
encoded = json.dumps(data, ensure_ascii=False) # 类似 JSON.stringify()
print(encoded)注意 JSON 的 true/null 与 Python 的 True/None 区别;不要把 Python 的 str(dict) 当作 JSON。
动手练习
给定下面的对话,提取所有用户说的话,并输出 JSON 字符串。
python
messages = [
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!"},
{"role": "user", "content": "介绍 Python"},
]参考答案
python
import json
texts = [m["content"] for m in messages if m["role"] == "user"]
print(json.dumps(texts, ensure_ascii=False))
# ["你好", "介绍 Python"]检查点:能解释 messages[0]["content"] 与 messages[0].content 为什么只有前者能用吗?