一、字典基础

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 张飞
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐