Skip to content

02 · 数据结构 ​

🎯 难度:零基础⏱ 预计:60 分钟# list# dict# JSON

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 为什么只有前者能用吗?

用心写给每一个想入门 Agent 开发的前端工程师