杰瑞科技汇

Python list 中 dict 如何操作?

基本概念:什么是列表中的字典?

想象一下,你有一个学生名单,每个学生都有姓名、年龄和学号这些信息。

  • 列表:就像一个名单,它按顺序存放所有学生。
  • 字典:就像每个学生的信息卡,它通过键值对来存储具体信息(如 "name": "张三")。

将它们结合起来,列表中的字典就是这样一个结构:

students = [
    {"name": "张三", "age": 20, "student_id": "S001"},
    {"name": "李四", "age": 21, "student_id": "S002"},
    {"name": "王五", "age": 19, "student_id": "S003"}
]

在这个例子中:

  • students 是一个列表(用方括号 [] 表示)。
  • 列表里有3个元素,每个元素都是一个字典(用花括号 表示)。
  • 每个字典都代表一个学生,包含了 "name", "age", "student_id" 这三个键。

如何访问数据?

访问这种嵌套结构需要逐层深入,使用索引来访问列表,使用键来访问字典。

a. 访问整个字典(单个学生)

通过列表的索引,你可以获取到列表中的任何一个字典。

# 获取第一个学生(索引为0)的信息
first_student = students[0]
print(f"第一个学生是: {first_student}")
# 输出: 第一个学生是: {'name': '张三', 'age': 20, 'student_id': 'S001'}

b. 访问字典中的特定值(某个学生的某个属性)

先通过索引定位到字典,再通过键获取值。

# 获取第一个学生的姓名
first_student_name = students[0]["name"]
print(f"第一个学生的姓名是: {first_student_name}")
# 输出: 第一个学生的姓名是: 张三
# 获取第二个学生的年龄
second_student_age = students[1]["age"]
print(f"第二个学生的年龄是: {second_student_age}")
# 输出: 第二个学生的年龄是: 21

c. 使用循环遍历所有数据

这是最常用的操作,你可以遍历列表,对每个字典进行处理。

方法1:直接遍历列表

for student in students:
    # student 变量依次指向列表中的每一个字典
    print(f"姓名: {student['name']}, 年龄: {student['age']}")

输出:

姓名: 张三, 年龄: 20
姓名: 李四, 年龄: 21
姓名: 王五, 年龄: 19

方法2:使用 enumerate 获取索引和值

如果你需要在遍历时知道当前是第几个元素,enumerate 非常有用。

for index, student in enumerate(students):
    print(f"索引 {index}: {student['name']} (学号: {student['student_id']})")

输出:

索引 0: 张三 (学号: S001)
索引 1: 李四 (学号: S002)
索引 2: 王五 (学号: S003)

如何修改、添加和删除数据?

a. 修改数据

找到对应的字典和键,然后直接赋新值。

# 将李四的年龄改为22
students[1]["age"] = 22
print("修改后的学生列表:")
print(students)

输出:

修改后的学生列表:
[{'name': '张三', 'age': 20, 'student_id': 'S001'}, {'name': '李四', 'age': 22, 'student_id': 'S002'}, {'name': '王五', 'age': 19, 'student_id': 'S003'}]

b. 添加新数据(添加新学生)

使用列表的 append() 方法在末尾添加一个新的字典。

new_student = {"name": "赵六", "age": 18, "student_id": "S004"}
students.append(new_student)
print("添加新学生后的列表:")
print(students)

输出:

添加新学生后的列表:
[{'name': '张三', 'age': 20, 'student_id': 'S001'}, {'name': '李四', 'age': 22, 'student_id': 'S002'}, {'name': '王五', 'age': 19, 'student_id': 'S003'}, {'name': '赵六', 'age': 18, 'student_id': 'S004'}]

c. 删除数据

有几种方式可以删除数据:

  1. del 语句:通过索引删除整个字典。

    # 删除索引为1的学生(李四)
    del students[1]
    print("删除李四后的列表:")
    print(students)

    输出:

    删除李四后的列表:
    [{'name': '张三', 'age': 20, 'student_id': 'S001'}, {'name': '王五', 'age': 19, 'student_id': 'S003'}, {'name': '赵六', 'age': 18, 'student_id': 'S004'}]
  2. pop() 方法:通过索引删除并返回被删除的元素。

    # 删除并返回索引为0的学生(张三)
    removed_student = students.pop(0)
    print(f"被删除的学生是: {removed_student}")
    print("使用pop删除后的列表:")
    print(students)

    输出:

    被删除的学生是: {'name': '张三', 'age': 20, 'student_id': 'S001'}
    使用pop删除后的列表:
    [{'name': '王五', 'age': 19, 'student_id': 'S003'}, {'name': '赵六', 'age': 18, 'student_id': 'S004'}]
  3. 从字典中删除键值对:如果你只想删除某个学生的某个属性,而不是整个学生。

    # 删除赵六的年龄
    students[2].pop("age")
    print("删除赵六年龄后的列表:")
    print(students)

    输出:

    删除赵六年龄后的列表:
    [{'name': '王五', 'age': 19, 'student_id': 'S003'}, {'name': '赵六', 'student_id': 'S004'}]

常用操作和技巧

a. 根据条件筛选数据

找出所有年龄大于等于20岁的学生。

adult_students = [student for student in students if student["age"] >= 20]
print("年龄大于等于20岁的学生:")
print(adult_students)

输出:

年龄大于等于20岁的学生:
[{'name': '王五', 'age': 19, 'student_id': 'S003'}]

注意:这里原 students 列表已经被之前的操作修改了。

b. 根据某个值查找字典

根据学号 S003 找到对应的学生。

student_id_to_find = "S003"
found_student = None  # 先初始化一个变量
for student in students:
    if student["student_id"] == student_id_to_find:
        found_student = student
        break  # 找到后就可以退出循环了
if found_student:
    print(f"找到了学号为 {student_id_to_find} 的学生: {found_student}")
else:
    print(f"没有找到学号为 {student_id_to_find} 的学生。")

输出:

找到了学号为 S003 的学生: {'name': '王五', 'age': 19, 'student_id': 'S003'}

操作 代码示例 说明
创建 my_list = [{"k1": "v1"}, {"k2": "v2"}] 列表包含多个字典。
访问整个元素 item = my_list[0] 通过列表索引获取字典。
访问元素内的值 value = my_list[0]["k1"] 先用索引,再用键获取值。
遍历 for item in my_list: ... 遍历列表中的每个字典。
修改值 my_list[0]["k1"] = "new_value" 直接对指定键赋值。
添加元素 my_list.append({"k3": "v3"}) 在列表末尾添加新字典。
删除元素 del my_list[0]my_list.pop(0) 删除整个字典。
删除键值对 my_list[0].pop("k1") 从字典中删除一个键。
筛选 [item for item in my_list if item["k1"] == "v1"] 使用列表推导式筛选。

列表中字典的结构是 Python 编程中处理结构化数据的核心模式,熟练掌握它对数据处理、API 响应解析、配置文件管理等任务至关重要。

分享:
扫描分享到社交APP
上一篇
下一篇