当前位置:首页>python>Python 零基础 100 天 — Day 10 字典

Python 零基础 100 天 — Day 10 字典

  • 2026-10-11 07:59:30
Python 零基础 100 天 — Day 10 字典

🐍 Python Day10:字典 — 键值对的魔法世界

🕐 预计用时:2-3 小时 | 🎯 今日目标:掌握字典的创建、访问、修改和常用操作


📖 今日目录

  1. 什么是字典?
  2. 创建字典
  3. 访问字典
  4. 增删改操作
  5. 字典常用方法
  6. 字典推导式
  7. 嵌套字典
  8. 实战项目
  9. 今日小结

1. 什么是字典?

字典(Dict)是 Python 最强大的数据结构——用"键-值对"存储数据,就像一本真正的字典。

查"苹果" → 得到"apple",查"香蕉" → 得到"banana"。

对比
列表
字典
访问方式
用索引(位置)
用键(名字)
示例
fruits[0]info["name"]
适用场景
有序的数据集合
有明确含义的数据
生活比喻
排队——按编号找人
通讯录——按姓名查电话
# 列表:按位置取值scores = [95, 87, 92]print(scores[0])  # 95(第几个?不直观)# 字典:按名字取值scores = {"张三": 95, "李四": 87, "王五": 92}print(scores["张三"])  # 95(一目了然)

2. 创建字典

📖 直接创建

# 空字典empty = {}empty2 = dict()# 带数据的字典person = {    "name": "张三",    "age": 25,    "height": 175.5,    "is_student": False}print(person)      # {'name': '张三', 'age': 25, ...}print(len(person)) # 4 — 键值对数量

🏭 其他创建方式

# 从键值对列表创建pairs = [("name", "张三"), ("age", 25)]d = dict(pairs)print(d)  # {'name': '张三', 'age': 25}# 用关键字参数d = dict(name="张三", age=25)print(d)  # {'name': '张三', 'age': 25}# 用 fromkeys 批量创建(所有键共享同一个值)keys = ["a", "b", "c"]d = dict.fromkeys(keys, 0)print(d)  # {'a': 0, 'b': 0, 'c': 0}

💡 字典的键必须是不可变类型: ✅ 可以用:字符串、数字、元组 ❌ 不能用:列表、字典、集合(因为可变)

# ✅ 合法d = {"name": "张三", 42: "数字键", (1,2): "元组键"}# ❌ 不合法# d = {[1,2]: "列表键"}  # TypeError!

3. 访问字典

📍 用键取值

person = {"name": "张三", "age": 25, "city": "北京"}print(person["name"])  # 张三print(person["age"])   # 25# 键不存在会报错 KeyError# print(person["email"])  # ❌ KeyError

🛡️ 用 get() 安全取值

# get() 键不存在时返回默认值,不报错print(person.get("name"))           # 张三print(person.get("email"))          # None(不报错)print(person.get("email", "无"))    # 无(自定义默认值)

💡 person["key"] vs person.get("key"):["key"] = 确定键存在时用,不存在会报错 .get("key") = 不确定键是否存在时用,更安全 实际开发中,get() 用得更多。

🔍 判断键是否存在

person = {"name": "张三", "age": 25}# in 判断print("name" in person)    # Trueprint("email" in person)   # False# 也支持 not inprint("email" not in person)  # True

4. 增删改操作

➕ 添加/修改

person = {"name": "张三", "age": 25}# 修改已有的值person["age"] = 26print(person)  # {'name': '张三', 'age': 26}# 添加新键值对person["email"] = "zhangsan@example.com"person["city"] = "上海"print(person)  # {'name': '张三', 'age': 26, 'email': '...', 'city': '上海'}# update() 批量更新(合并字典)person.update({"age": 27, "phone": "13800138000"})print(person)  # age 更新为 27,新增 phone

➖ 删除

person = {"name": "张三", "age": 25, "city": "北京", "email": "test@test.com"}# del — 按键删除del person["city"]print(person)  # {'name': '张三', 'age': 25, 'email': '...'}# pop() — 删除并返回值age = person.pop("age")print(age)     # 25print(person)  # {'name': '张三', 'email': '...'}# pop() 带默认值 — 键不存在也不报错phone = person.pop("phone", "未填写")print(phone)   # 未填写# popitem() — 删除最后一个键值对last = person.popitem()print(last)    # ('email', 'test@test.com')# clear() — 清空person.clear()print(person)  # {}

5. 字典常用方法

📋 获取所有键、值、键值对

person = {"name": "张三", "age": 25, "city": "北京"}# 所有键print(person.keys())    # dict_keys(['name', 'age', 'city'])# 所有值print(person.values())  # dict_values(['张三', 25, '北京'])# 所有键值对print(person.items())   # dict_items([('name', '张三'), ('age', 25), ('city', '北京')])# 转成列表print(list(person.keys()))   # ['name', 'age', 'city']print(list(person.values())) # ['张三', 25, '北京']

🔄 遍历字典

person = {"name": "张三", "age": 25, "city": "北京"}# 遍历键for key in person:    print(key, ":", person[key])# 遍历键值对(推荐)for key, value in person.items():    print(f"{key} = {value}")# 遍历值for value in person.values():    print(value)

📊 方法速查表

方法
作用
示例
get(key, default)
安全取值
d.get("name", "无")
keys()
所有键
d.keys()
values()
所有值
d.values()
items()
所有键值对
d.items()
update(dict2)
批量更新
d.update({"a": 1})
pop(key)
删除并返回
d.pop("name")
popitem()
删除最后一对
d.popitem()
setdefault(key, val)
有则返回,无则设置
d.setdefault("x", 0)
clear()
清空
d.clear()
copy()
浅拷贝
d.copy()

💡 setdefault 的妙用——计数器:

# 统计字符出现次数text = "hello world"counter = {}for ch in text:    counter[ch] = counter.get(ch, 0) + 1print(counter)  # {'h': 1, 'e': 1, 'l': 3, 'o': 2, ...}

6. 字典推导式

# 基本语法squares = {i: i**2 for i in range(1, 6)}print(squares)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}# 带条件even_sq = {i: i**2 for i in range(1, 11) if i % 2 == 0}print(even_sq)  # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}# 两个列表合并成字典keys = ["name", "age", "city"]values = ["张三", 25, "北京"]person = {k: v for k, v in zip(keys, values)}print(person)  # {'name': '张三', 'age': 25, 'city': '北京'}# 反转字典d = {"a": 1, "b": 2, "c": 3}reversed_d = {v: k for k, v in d.items()}print(reversed_d)  # {1: 'a', 2: 'b', 3: 'c'}

7. 嵌套字典

字典的值可以是任何类型——包括另一个字典。

# 学生信息(嵌套字典)students = {    "张三": {        "age": 20,        "scores": {"数学": 95, "英语": 87, "Python": 92}    },    "李四": {        "age": 21,        "scores": {"数学": 78, "英语": 90, "Python": 85}    }}# 访问嵌套值print(students["张三"]["scores"]["数学"])  # 95# 遍历嵌套字典for name, info in students.items():    print(f"\n{name}:")    print(f"  年龄:{info['age']}")    for subject, score in info["scores"].items():        print(f"  {subject}:{score}")

8. 实战项目

🏋️ 实战 1:通讯录管理系统

contacts = {}print("=== 通讯录管理系统 ===")while True:    print("\n1. 添加联系人")    print("2. 查找联系人")    print("3. 删除联系人")    print("4. 查看所有联系人")    print("5. 修改联系人")    print("0. 退出")    choice = input("请选择:")    if choice == "1":        name = input("姓名:")        phone = input("电话:")        email = input("邮箱:")        contacts[name] = {"phone": phone, "email": email}        print(f"✅ {name} 已添加")    elif choice == "2":        name = input("查找姓名:")        if name in contacts:            info = contacts[name]            print(f"电话:{info['phone']}")            print(f"邮箱:{info['email']}")        else:            print("❌ 联系人不存在")    elif choice == "3":        name = input("删除姓名:")        if name in contacts:            del contacts[name]            print(f"✅ {name} 已删除")        else:            print("❌ 联系人不存在")    elif choice == "4":        if contacts:            print("\n--- 通讯录 ---")            for name, info in contacts.items():                print(f"{name}:{info['phone']} / {info['email']}")            print(f"共 {len(contacts)} 个联系人")        else:            print("通讯录为空")    elif choice == "5":        name = input("修改谁的信息:")        if name in contacts:            print("1.修改电话 2.修改邮箱")            sub = input("选择:")            if sub == "1":                contacts[name]["phone"] = input("新电话:")                print("✅ 电话已更新")            elif sub == "2":                contacts[name]["email"] = input("新邮箱:")                print("✅ 邮箱已更新")        else:            print("❌ 联系人不存在")    elif choice == "0":        print("再见!")        break    else:        print("无效选择")

🏋️ 实战 2:单词频率统计

text = input("请输入一段英文文本:").lower()# 去除标点符号for ch in ".,!?;:\"'()[]{}":    text = text.replace(ch, "")words = text.split()freq = {}for word in words:    freq[word] = freq.get(word, 0) + 1# 按频率排序sorted_freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)print("\n=== 词频统计 ===")for word, count in sorted_freq[:10]:  # 显示前10    bar = "█" * count    print(f"{word:12s} | {bar} ({count})")

🏋️ 练习题

练习 1:创建一个字典存储5个学生的成绩,计算平均分,找出最高分和最低分的学生。

练习 2:写一个程序,输入一段文本,统计每个字符出现的次数(忽略空格)。

练习 3:给定两个字典 {"a": 1, "b": 2} 和 {"b": 3, "c": 4},合并成一个字典(相同键的值相加)。结果:{"a": 1, "b": 5, "c": 4}。

练习 4:用字典推导式创建一个映射:把 1~10 的数字映射为它的平方根。


9. 今日小结

知识点
一句话总结
字典
键值对存储,用 {} 创建,键必须不可变
访问
d["key"]
(可能报错)或 d.get("key")(安全)
增删改
d["key"] = val
 增改,del / pop() 删除
遍历
for k, v in d.items()
 遍历键值对
字典推导式
{k: v for k, v in ...}
嵌套
字典的值可以是字典,用 d["k1"]["k2"] 访问
计数器
d[key] = d.get(key, 0) + 1
 经典模式

🧠 自检清单

⬜ 能创建字典并用键访问值

⬜ 知道 ["key"] 和 .get("key") 的区别

⬜ 能增删改字典元素

⬜ 能用 items() 遍历字典

⬜ 能用字典推导式创建字典

⬜ 能用 get(key, 0) + 1 做计数器

⭐ 能处理嵌套字典

🎯 Day 11 预告

明天学习函数(Function)——把重复的代码封装成"工具",用的时候调一下就行。

就像你有一把"万能扳手",遇到螺丝就拧一下。🔧


📅 Day 10 完成!列表、元组、集合、字典——Python 四大容器全部学完。明天开始学函数,进入"真正编程"的世界!明天见! 🚀

轻松时刻:

请在微信客户端打开

最新文章

随机文章