Python 字典与JSON数据交互完全指南
·
一、字典基础
1.1 什么是字典
字典是Python中一种键值对存储的数据结构,通过键(Key)快速查找值(Value),牺牲存储空间换取查找速度。
# 基本格式
obj = {
"key1": 10,
"key2": 20,
"key3": 30
}
print(obj["key3"]) # 30
1.2 字典的定义方式
# 方式1:直接使用 {}
d1 = {} # 空字典
d2 = {
"id": 101,
"name": "马化腾",
"info": "企业家"
}
# 方式2:使用 dict() 转换
d3 = dict([["id", 101], ("name", "马化腾")])
print(d3) # {'id': 101, 'name': '马化腾'}
二、字典的特性
2.1 键(Key)的要求
键必须是不可变数据类型:int、float、str、bool、None、tuple
d1 = {
1: 2, # int 可以
"key": 100, # str 可以
(1,): 789, # tuple 可以
True: 666, # bool 可以
None: 456, # None 可以
# []: 963, # list 不可以(可变)
# {}: 741 # dict 不可以(可变)
}
2.2 值(Value)的要求
值可以是任意数据类型
d0 = {
"key1": 100,
"key2": 3.14,
"key3": "hello",
"key4": True,
"key5": None,
"key6": [1, 2, 3],
"key7": (1, 2, 3),
"key8": { # 嵌套字典
"key81": 666,
"key82": {
"key821": 888,
"key822": [{"id": 101, "name": "马云"}]
}
}
}
2.3 嵌套访问
print(d0['key8']['key82']['key822'][0]['name']) # 马云
三、字典的遍历
3.1 三种遍历方式
d0 = {"id": 101, "age": 20, "name": "马云"}
# 1. 遍历键
for k in d0.keys():
print(k, d0[k])
# 2. 遍历值
for v in d0.values():
print(v)
# 3. 遍历键值对(最常用)
for k, v in d0.items():
print(k, v)
# 4. 直接遍历键(简写)
for k in d0:
print(k)
3.2 成员判断
print("id" in d0) # True
print("addr" in d0) # False
四、字典的常见操作
4.1 获取值:get()
安全获取值,不存在返回None或默认值
d0 = {"id": 100, "name": "马云", "age": 20}
# 普通方式(键不存在会报错)
print(d0["age"]) # 20
# get方式(安全)
print(d0.get("age")) # 20
print(d0.get("address")) # None
print(d0.get("address", "北京")) # 北京(默认值)
4.2 添加/修改
d0 = {"id": 100}
# 直接赋值(键存在则修改,不存在则添加)
d0["name"] = "马云" # 添加
d0["name"] = "马化腾" # 修改
print(d0) # {'id': 100, 'name': '马化腾'}
# setdefault(键存在返回原值,不存在设置默认值)
d0.setdefault("addr", "杭州")
4.3 删除
d0 = {"id": 100, "name": "马云", "age": 20}
# pop():删除指定键,返回对应值
v = d0.pop("name")
print(v, d0) # 马云 {'id': 100, 'age': 20}
# popitem():删除最后一个键值对
r = d0.popitem()
print(r, d0) # ('age', 20) {'id': 100}
# del:删除指定键
del d0["id"]
# clear():清空字典
d0.clear()
4.4 更新与合并
d0 = {"id": 100, "name": "马云"}
# update:合并字典
d0.update({
"info": "著名企业家",
"sex": "男"
})
print(d0) # {'id': 100, 'name': '马云', 'info': '著名企业家', 'sex': '男'}
# fromkeys:创建所有键值相同的字典
d1 = dict.fromkeys(["key1", "key2", "key3"], 888)
print(d1) # {'key1': 888, 'key2': 888, 'key3': 888}
五、实战案例:字符统计
# 统计字符串中每个字符出现的次数
s = "hello world"
d0 = {}
for c in s:
# 方法1:使用 if 判断
if c in d0:
d0[c] += 1
else:
d0[c] = 1
# 方法2:使用 get()(更优雅)
for c in s:
d0[c] = d0.get(c, 0) + 1
print(d0) # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
六、JSON 序列化与反序列化
6.1 什么是JSON
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,用于跨语言数据传递。
import json
# Python字典/列表 → JSON字符串(序列化)
students = [
{"id": 101, "name": "张飞"},
{"id": 102, "name": "赵云"},
]
students_str = json.dumps(students, ensure_ascii=False)
print(type(students_str)) # <class 'str'>
# JSON字符串 → Python对象(反序列化)
student_list = json.loads(students_str)
print(type(student_list)) # <class 'list'>
print(student_list[0]["name"]) # 张飞
6.2 文件读写(推荐方式)
import json
students = [
{"id": 101, "name": "张飞"},
{"id": 102, "name": "赵云"},
]
# 写入文件
with open("da print(len(data), data[0]["name"]) # 2 张飞ta.txt", "w", encoding="utf-8") as f:
json.dump(students, f, ensure_ascii=False, indent=2)
# 读取文件
with open("data.txt", "r", encoding="utf-8") as f:
data = json.load(f)
print(len(data), data[0]["name"]) # 2 张飞更多推荐
所有评论(0)