字典与对象:键值对的世界
什么是键值对?
如果列表是"带编号的柜子"(第 0 个、第 1 个……),那字典/对象就是"带标签的柜子"——你通过标签(键)找到对应的东西(值)。
就像真正的字典:查"apple"这个词(键),得到"苹果"这个释义(值)。
创建字典/对象
加载代码编辑器中……
| Python dict | JavaScript Object | |
|---|---|---|
| 键的引号 | 必须加引号 | 可以不加(如果是合法标识符) |
| 访问方式 | d["key"] 或 d.get("key") | obj.key 或 obj["key"] |
| 获取长度 | len(d) | Object.keys(obj).length |
JS 对象的键可以不加引号(
{ name: "小明" }),但 Python 字典的键必须加引号({ "name": "小明" })。这是一个常见的转换错误。
增删改查
加载代码编辑器中……
遍历
加载代码编辑器中……
| 操作 | Python | JavaScript |
|---|---|---|
| 所有键 | d.keys() | Object.keys(obj) |
| 所有值 | d.values() | Object.values(obj) |
| 键值对 | d.items() | Object.entries(obj) |
JS 的方法都以
Object.xxx()开头,是静态方法。Python 的是实例方法。写法不同,但功能一样。
嵌套结构
真实数据经常是嵌套的——对象里套数组,数组里套对象:
加载代码编辑器中……
问问 AI
问 AI:"JSON 和 JavaScript 对象有什么关系?它们是同一个东西吗?"
JSON 是当今互联网上最通用的数据交换格式,理解它和 JS 对象的区别很重要。
🏋️AI 练习
设计一个"通讯录"数据结构,包含 3 个联系人,每个联系人有:姓名、电话、城市。然后:
- 打印所有联系人的姓名
- 查找住在"北京"的联系人
- 添加一个新联系人
- 删除一个联系人
用 Python 和 JS 各写一版。
JS 特有:Map
JS 的 Object 有一些局限性(键只能是字符串/Symbol),所以 ES6 引入了 Map:
加载代码编辑器中……
日常使用中,JS 大多数时候用普通 Object 就够了。Map 在需要非字符串键或频繁增删时更好。
小结
| 概念 | Python dict | JavaScript Object |
|---|---|---|
| 创建 | {"key": val} | {key: val} |
| 访问 | d["key"] | obj.key 或 obj["key"] |
| 安全访问 | .get(key, default) | obj.key ?? default |
| 删除 | del d["key"] | delete obj.key |
| 所有键 | d.keys() | Object.keys(obj) |
| 键值对 | d.items() | Object.entries(obj) |
| 检查键 | "key" in d | "key" in obj |