【Python中字典的操作】

目录

一、字典(Dictionary)基础操作

(1)定义和创建

(2)访问元素

(3)添加和修改元素

(4)删除元素

(5)清空字典

二、常用操作和方法

(1)遍历字典

✔️ 遍历键(keys())

✔️ 遍历值(values())

✔️ 遍历键值对(items())

(2)检查键是否存在

(3)获取字典的长度

(4)复制字典

三、字典推导式(Dictionary Comprehension)

四、字典的高级操作

(1)合并字典

(2)字典排序

(3)嵌套字典

五、带默认值的字典

六、经典案例(学生管理系统)

✅ 功能分析

1. 添加学生信息(number == 1)

✅ 优点:

2. 修改学生信息(number == 4)

3. 删除学生信息(number == 5)

✅ 优点:

4. 输入验证

总结

(1)字典适合的场景

(2)优点

(3)缺点


一、字典(Dictionary)基础操作

(1)定义和创建

字典是一种可变容器模型,以 {} 定义,存储键值对(key-value)。键必须是唯一的且不可变类型(如字符串、数字、元组等),值可以是任意数据类型。

# 创建字典
person = {
    "name": "张三",
    "age": 25,
    "hobbies": ["读书", "运动"],
    "is_student": False
}

(2)访问元素

通过键来访问对应的值,使用方括号 []get() 方法。

# 使用方括号访问
print(person["name"])  # 输出:张三

# 使用 get() 方法访问(推荐,可以避免 KeyError)
print(person.get("age"))  # 输出:25
print(person.get("gender", "男"))  # 如果键不存在,返回默认值

(3)添加和修改元素

直接通过键赋值来添加或修改元素。

# 添加新键值对
person["gender"] = "男"

# 修改已有键对应的值
person["age"] = 26

(4)删除元素

可以使用 del 语句、pop() 方法或 popitem() 方法。

# 使用 del 删除
del person["hobbies"]

# 使用 pop() 删除并返回值
age = person.pop("age")

# 使用 popitem() 删除并返回最后一个键值对(Python 3.7+ 按插入顺序)
last_item = person.popitem()

(5)清空字典

使用 clear() 方法。

person.clear()  # 清空字典

二、常用操作和方法

(1)遍历字典

✔️ 遍历键(keys()
for key in person.keys():
    print(key)
✔️ 遍历值(values()
for value in person.values():
    print(value)
✔️ 遍历键值对(items()
for key, value in person.items():
    print(f"{key}: {value}")

(2)检查键是否存在

使用 in 关键字。

if "name" in person:
    print("存在 name 键")

(3)获取字典的长度

print(len(person))  # 输出键值对的数量

(4)复制字典

使用 copy() 方法。

person_copy = person.copy()

三、字典推导式(Dictionary Comprehension)

用于快速创建字典。

# 示例:创建一个平方数的字典
squares = {x: x**2 for x in range(1, 6)}
print(squares)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

四、字典的高级操作

(1)合并字典

在 Python 3.9+ 中,可以使用 ||= 操作符。

dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}

# 合并两个字典
merged_dict = dict1 | dict2  # {'a':1, 'b':2, 'c':3, 'd':4}

# 更新字典
dict1 |= dict2  # dict1 变为 {'a':1, 'b':2, 'c':3, 'd':4}

对于旧版本 Python,可以使用 update() 方法:

dict1.update(dict2)  # 将 dict2 的键值对更新到 dict1

(2)字典排序

可以使用 sorted() 函数。

# 按键排序
sorted_dict = dict(sorted(person.items(), key=lambda item: item[0]))

# 按值排序
sorted_by_value = dict(sorted(person.items(), key=lambda item: item[1]))

(3)嵌套字典

字典的值可以是另一个字典。

nested_dict = {
    "class1": {"student1": 90, "student2": 85},
    "class2": {"student3": 95, "student4": 88}
}

五、带默认值的字典

使用 collections.defaultdict

from collections import defaultdict

# 创建一个默认值为 list 的字典
students = defaultdict(list)
students["class1"].extend(["张三", "李四"])
students["class2"].append("王五")

print(students)  # defaultdict(<class 'list'>, {'class1': ['张三', '李四'], 'class2': ['王五']})

六、经典案例(学生管理系统)

可以帮助你熟练掌握for、if、else、while、break、continue的 使用和嵌套熟悉list 和 dict的使用

student_info =[ {
    "id" : 101,
    "name" : "张三",
    "age" : 18,
    "sex" : "男"
},{
    "id" : 102,
    "name" : "翠花",
    "age" : 16,
    "sex" : "女"
}]
while True:
    print("***************相关操作************************")
    print("输入数字1,添加学生信息")
    print("输入数字2,查看所有学生信息")
    print("输入数字3,查看指定学生信息")
    print("输入数字4,修改学生信息")
    print("输入数字5,删除指定学生")
    print("输入数字0,退出系统")
    number = int(input("输入操作数字"))
    if 0 <= number <= 5:
        if number == 1:
            student = {}
            student_id = 100
            for e in student_info:
                if student_id < e["id"]:
                    student_id = e["id"]
            student["id"] = student_id + 1
            while True:
                name = input("输入姓名")
                if len(name) < 2 or len(name) > 4:
                    print("名字不合法")
                    print("请重新输入")
                    continue
                else:
                    student["name"] = name
                    break
            while True:
                age = int(input("输入年龄"))
                if age > 25 or age < 16:
                    print("年龄不符合(16-25)")
                    print("请重新输入")
                    continue
                else:
                    student["age"] = age
                    break
            while True:
                sex = input("输入性别")
                if sex == "男" or sex == "女":
                    student["sex"] = sex
                    break
                else:
                    print("性别不正确(男/女)")
                    print("请重新输入")
                    continue
            student_info.append(student)
            print("添加成功")
            print(student)
            continue
        if number == 2:
            for e in student_info:
                print(e)
            continue
        if number == 3:
            ip_id = int(input("请输入要查看的id"))
            for student in student_info:
                if student["id"] == ip_id:
                    print(student)
                    break
            else:
                print("该学生不存在")
                continue
        if number == 4:
            ip_id = int(input("请输入要修改的id"))
            for student in student_info:
                if student["id"] == ip_id:
                    while True:
                        name = input("输入姓名")
                        if len(name) < 2 or len(name) > 4:
                            print("名字不合法")
                            print("请重新输入")
                            continue
                        else:
                            student["name"] = name
                            break
                    while True:
                        age = int(input("输入年龄"))
                        if age > 25 or age < 16:
                            print("年龄不符合(16-25)")
                            print("请重新输入")
                            continue
                        else:
                            student["age"] = age
                            break
                    while True:
                        sex = input("输入性别")
                        if sex == "男" or sex == "女":
                            student["sex"] = sex
                            break
                        else:
                            print("性别不正确(男/女)")
                            print("请重新输入")
                            continue
                    print("修改成功")
                    print(student)
                    break
            else:
                print("该学生不存在")
                break
        if number == 5:
            ip_id = int(input("请输入要删除的id"))
            for student in student_info:
                if student["id"] == ip_id:
                    student_info.remove(student)
                    print("删除成功")
                    break
            else:
                print("该学生不存在")
            continue
        if number == 0:
            print("已退出系统")
            break
    else:
        print("无效的操作,请重新输入")

  • 使用 for 循环查找学生,而不是依赖索引计算。

  • 添加了输入验证和操作范围检查。

  • 对添加学生时的 id 生成逻辑进行了优化。

不过,仍有一些可以进一步优化的地方,我会逐一指出,并给出改进建议。


✅ 功能分析


1. 添加学生信息(number == 1

student_id = 100
for e in student_info:
    if student_id < e["id"]:
        student_id = e["id"]
student["id"] = student_id + 1
✅ 优点:
  • 通过遍历找到最大 id,避免重复。

2. 修改学生信息(number == 4

for student in student_info:
    if student["id"] == ip_id:
        # 修改逻辑
        ...
        break
else:
    print("该学生不存在")
    break

3. 删除学生信息(number == 5

for student in student_info:
    if student["id"] == ip_id:
        student_info.remove(student)
        print("删除成功")
        break
else:
    print("该学生不存在")
✅ 优点:
  • 使用 for...else 结构,逻辑清晰。

4. 输入验证

你已经对 number 进行了范围验证:

if 0 <= number <= 5:

这是一个很好的实践,避免了无效操作。


总结

(1)字典适合的场景

  • 需要快速通过键查找值

  • 存储无序的键值对集合

  • 需要动态添加或删除数据

(2)优点

  • 高效的查找和更新操作(平均时间复杂度 O(1))

  • 灵活的键值对结构

(3)缺点

  • 键必须是可哈希(不可变)类型

  • 占用内存相对较大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值