Python 字典与 JSON:带标签的储物柜和它的“快递兄弟”
文章目录
1.3 更安全的方式:get() —— 找不到就返回 None
2.2 json.dumps() —— Python 字典 → JSON 字符串
2.3 json.loads() —— JSON 字符串 → Python 字典
2.4 json.dump() —— 字典 → 直接写入文件
前言
学完列表和元组,你已经会往“购物车”里装东西了。但有一个问题始终绕不过去——光有购物车还不够,你得知道每个东西叫啥。
列表存东西是按顺序排队的:第 0 个是谁,第 1 个是谁……但你想找一个特定的东西,得从头翻到尾,效率太低。
那有没有一种数据结构,不按顺序,而是按名字存东西?就像你去学校门口取快递,不是在一堆快递里挨个翻,而是直接报取件码——快递员“嗖”地一下就把你的包裹递过来了。
这就是今天的主角——字典(dict)。
字典里存的是“键值对”(key-value pair),每个“钥匙”对应一个“值”,找到钥匙就能拿到对应的东西。存的时候靠钥匙,取的时候也靠钥匙,跟现实世界里查字典、查通讯录一模一样。
学完字典,我们再来看看它的“好兄弟”——JSON。你平时调接口、前后端传数据、存配置文件,到处都有 JSON 的影子。Python 的字典和 JSON 长得几乎一样,互相转换只需要两行代码。
这一篇分两大块:第一章,字典的十八般武艺;第二章,字典和 JSON 的无缝切换。
开整!🔑
一、字典 —— 带标签的储物柜
1.1 字典长啥样?
字典用花括号 {} 表示,里面存的是 键值对(key: value),键和值用冒号 : 隔开,每组用逗号隔开:
python
# 空字典
empty = {}
print(type(empty)) # <class 'dict'>
# 存学生信息
student = {
"name": "王小明",
"age": 18,
"score": 95.5,
"is_graduated": False
}
print(student)
📌 键一般是字符串,也可以是数字或元组;值可以是任何类型——字符串、数字、列表、另一个字典,随便装。就像一个带标签的储物柜,每个格子贴了个名字,你想存啥就存啥。
1.2 怎么取数据?报“键”名就行了!
python
student = {"name": "王小明", "age": 18, "score": 95.5}
print(student["name"]) # 王小明
print(student["age"]) # 18
# print(student["phone"]) # ❌ 键不存在,报 KeyError!
⚠️ 如果用
[]取一个不存在的键,程序直接崩溃。所以取之前最好先确认一下。
1.3 更安全的方式:get() —— 找不到就返回 None
python
student = {"name": "王小明", "age": 18}
print(student.get("name")) # 王小明
print(student.get("phone")) # None(不报错!)
print(student.get("phone", "未填写")) # 未填写(自定义默认值)
💡
[]是“硬取”,没有就报错;get()是“软取”,没有就给你 None 或者你指定的默认值。
1.4 怎么改数据?直接赋值!
python
student = {"name": "王小明", "age": 18}
# 改已有的
student["age"] = 19
print(student) # {'name': '王小明', 'age': 19}
# 加新的(直接给不存在的键赋值,就自动添加了)
student["phone"] = "13800138000"
print(student) # {'name': '王小明', 'age': 19, 'phone': '13800138000'}
1.5 怎么删数据?
| 方法 | 作用 |
|---|---|
pop(键) |
删除指定键,返回对应的值 |
popitem() |
删除最后一个键值对,返回 (键, 值) |
clear() |
清空整个字典 |
python
student = {"name": "王小明", "age": 18, "score": 95.5, "phone": "13800138000"}
# 删除指定键
phone = student.pop("phone")
print(phone) # 13800138000
print(student) # {'name': '王小明', 'age': 18, 'score': 95.5}
# 删除最后一个
last = student.popitem()
print(last) # ('score', 95.5)
print(student) # {'name': '王小明', 'age': 18}
# 清空
student.clear()
print(student) # {}
1.6 怎么遍历字典?
python
student = {"name": "王小明", "age": 18, "score": 95.5}
# 遍历所有键(默认)
for key in student:
print(key, student[key])
# 遍历所有键值对
for key, value in student.items():
print(key, "→", value)
# 只遍历键
for key in student.keys():
print(key)
# 只遍历值
for value in student.values():
print(value)
1.7 几个常用方法
| 方法 | 作用 |
|---|---|
keys() |
返回所有键 |
values() |
返回所有值 |
items() |
返回所有键值对 |
update(另一个字典) |
合并另一个字典到当前字典 |
python
student = {"name": "王小明", "age": 18}
extra = {"score": 95.5, "phone": "13800138000"}
student.update(extra)
print(student) # {'name': '王小明', 'age': 18, 'score': 95.5, 'phone': '13800138000'}
1.8 字典实战:统计字符出现次数
python
text = "hello world"
count = {}
for ch in text:
if ch in count:
count[ch] += 1
else:
count[ch] = 1
print(count) # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
💡 这种“统计某个东西出现次数”的场景,字典是绝对王牌。
1.9 字典 vs 列表:什么时候用哪个?
| 场景 | 用啥 | 原因 |
|---|---|---|
| 存学生信息(姓名、年龄、成绩) | 字典 | 每个字段有名字,容易理解 |
| 存全班学生姓名列表 | 列表 | 就存一堆名字,不需要标签 |
| 统计文字出现次数 | 字典 | 字符→次数,天然键值对 |
| 按顺序处理数据 | 列表 | 有顺序要求,列表更合适 |
🧠 金句:列表是“排队”,字典是“贴标签”。需要顺序就用列表,需要名字就用字典。
二、JSON —— 字典的“快递兄弟”
2.1 JSON 是啥?
JSON(JavaScript Object Notation) 是一种通用的数据格式,长得和 Python 字典几乎一模一样:
json
{
"name": "王小明",
"age": 18,
"score": 95.5,
"hobbies": ["篮球", "音乐"],
"address": {"city": "北京", "district": "海淀"}
}
📌 JSON 就是所有编程语言都能看懂的“公共语言”。你在前端写 JavaScript,后端写 Python,俩人怎么沟通?用 JSON!Python 把字典转成 JSON 字符串发过去,JavaScript 接过来直接解析成对象。
2.2 json.dumps() —— Python 字典 → JSON 字符串
python
import json
student = {
"name": "王小明",
"age": 18,
"score": 95.5,
"hobbies": ["篮球", "音乐"],
"is_graduated": False,
"address": {
"city": "北京",
"district": "海淀"
}
}
# 转成 JSON 字符串
json_str = json.dumps(student, ensure_ascii=False, indent=4)
print(json_str)
print(type(json_str)) # <class 'str'>
输出(格式化后的 JSON 字符串):
json
{
"name": "王小明",
"age": 18,
"score": 95.5,
"hobbies": ["篮球", "音乐"],
"is_graduated": false,
"address": {
"city": "北京",
"district": "海淀"
}
}
⚠️ 注意看:Python 的
True变成了 JSON 的true,False变成了false,None变成了null。
2.3 json.loads() —— JSON 字符串 → Python 字典
python
import json
json_str = '{"name": "王小明", "age": 18, "is_graduated": false}'
# 解析成 Python 字典
student = json.loads(json_str)
print(student) # {'name': '王小明', 'age': 18, 'is_graduated': False}
print(type(student)) # <class 'dict'>
print(student["name"]) # 王小明
💡 前后端交互的核心逻辑就是:后端把字典
dumps()成 JSON 字符串发给前端,前端解析后展示;前端传回 JSON 字符串,后端loads()成字典再处理。
2.4 json.dump() —— 字典 → 直接写入文件
python
import json
student = {"name": "王小明", "age": 18, "score": 95.5}
# 直接写入文件,不用手动转字符串
with open("student.json", "w", encoding="utf-8") as f:
json.dump(student, f, ensure_ascii=False, indent=4)
打开 student.json:
json
{
"name": "王小明",
"age": 18,
"score": 95.5
}
2.5 json.load() —— 从文件直接读取成字典
python
import json
with open("student.json", "r", encoding="utf-8") as f:
student = json.load(f)
print(student) # {'name': '王小明', 'age': 18, 'score': 95.5}
print(student["name"]) # 王小明
2.6 一张图总结 JSON 四大方法
| 方法 | 输入 | 输出 | 场景 |
|---|---|---|---|
json.dumps() |
Python 字典 | JSON 字符串 | 转成字符串发网络请求 |
json.loads() |
JSON 字符串 | Python 字典 | 接收网络响应并解析 |
json.dump() |
Python 字典 + 文件对象 | 写入文件 | 把字典存成 JSON 文件 |
json.load() |
文件对象 | Python 字典 | 从 JSON 文件读取成字典 |
🎯 核心要点速记
| 概念 | 一句话 |
|---|---|
| 字典 | 键值对存储,用 {},取数据用 dict["键"] 或 dict.get("键") |
| 字典增删 | 直接赋值 dict["新键"] = 值 就添加,pop(键) 删除 |
| 字典遍历 | for key, value in dict.items(): |
| JSON | 跨语言的通用数据格式,和 Python 字典长得基本一样 |
| dumps/loads | 字典 ↔ JSON 字符串(内存中转换) |
| dump/load | 字典 ↔ JSON 文件(读写文件) |
总结
今天你解锁了两件新装备:
字典——带标签的储物柜,存东西再也不怕找不到。想存啥、想取啥,喊一声“键”就行,不用从头翻到尾。
JSON——字典的“快递兄弟”,让 Python 和其他任何语言都能无障碍沟通。你写的 Python 字典,dumps() 一下,Java、JavaScript、C++ 都能读;别人发来的 JSON,loads() 一下,直接变成 Python 字典。
你平时用的手机 App,背后就是无数个 JSON 在来回跑——你的个人信息、订单数据、视频推荐列表,全是 JSON 格式在传输。
学完这一篇,我们就可以去调一个真正的 API 接口了:
比如打开lol的网址输入调入所有英雄
python
import requests url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2974219" res = requests.get(url) # print(res) # print(res.json()) # heros = res.json()['heroes'] # print(heros)

将会得到所有关于所有英雄信息,你也可以尝试去修改代码获取其他信息

这种代码,将来你会天天写。而今天,你站在了起点。
慢慢来,我们总有一天会成为开发高手,咱们下期见~ 👋🐍
更多推荐



所有评论(0)