Python学习日记3
2026/8/23 7:31:03 网站建设 项目流程

一 ,使用字符串

这一章节内容由于之前笔记网络出现问题未保存就不再次写了

二,字典

1,字典的用途

字典(dict)是Python中非常重要的一种数据结构,它的设计灵感来源于我们日常使用的字典——通过“单词”(键)快速查找“含义”(值)。

适用场景:存储棋盘状态(键为坐标元组,值为棋子信息);记录文件修改时间(键为文件名,值为时间戳);实现电话簿、地址簿等快速查找功能。

对比列表:列表适合按顺序存储和访问,通过下标索引;字典通过来访问,更直观、更高效

示例:

#列表 names = ['Alice', 'Beth', 'Cecil'] numbers = ['2341', '9102', '3158'] print(numbers[names.index('Cecil')]) # 输出 3158 #字典 phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3158'} print(phonebook['Cecil']) # 输出 3158

2,创建和使用字典

(1)基本语法

  • 字典用花括号{}表示。

  • 每个项由键: 值组成,项之间用逗号分隔。

  • 空字典:{}

phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

注意:键必须唯一,但是值可以重复

(2)使用dict()函数创建字典

# 从键-值对序列创建 items = [('name', 'Gumby'), ('age', 42)] d = dict(items) print(d) # {'name': 'Gumby', 'age': 42} # 使用关键字参数 d = dict(name='Gumby', age=42) print(d) # {'name': 'Gumby', 'age': 42} # 创建空字典 d = dict()

(3)基本字典操作

(4)字典与列表的区别

示例:

#字典自动添加新建 x = {} x[42] = 'Foobar' print(x) # {42: 'Foobar'} #列表会报错 x = [] x[42] = 'Foobar' # IndexError

效率提示:检查字典是否包含某个键,比列表检查是否包含某个值要快得多,尤其在数据量较大时

(5)综合示例

简单的电话数据库

# 数据库:每个人是一个字典,包含电话和地址 people = { 'Alice': {'phone': '2341', 'addr': 'Foo drive 23'}, 'Beth': {'phone': '9102', 'addr': 'Bar street 42'}, 'Cecil': {'phone': '3158', 'addr': 'Baz avenue 90'} } # 标签说明 labels = {'phone': 'phone number', 'addr': 'address'} name = input('Name: ') request = input('Phone number (p) or address (a)? ') # 确定查询的键 if request == 'p': key = 'phone' elif request == 'a': key = 'addr' else: key = None # 输出结果 if key and name in people: print(f"{name}'s {labels[key]} is {people[name][key]}") else: print("Not found.")

运行结果示例:

Name: Beth Phone number (p) or address (a)? p Beth's phone number is 9102

3,将字符串格式设置功能用于字典

Python 的字符串格式化方法format()format_map()支持从字典中提取值来填充字符串模板,这在生成动态文本(如报告、HTML页面、邮件模板等)时非常方便。

3,1 基本用法:format_map()

使用format_map()方法时,传入一个字典,字符串中的占位符字段名会自动匹配字典的键。

phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3158'} # 直接用字典中的键作为占位符 msg = "Cecil's phone number is {Cecil}.".format_map(phonebook) print(msg) # Cecil's phone number is 3158.

注意:占位符{Cecil}必须与字典中的键名完全一致,否则会报错KeyError

3,2 与format()的对比

3,3 实用场景:模板渲染

字典格式化非常适合用来填充模板字符串,例如生成 HTML 页面、邮件内容、配置文件等.

# HTML 模板 template = ''' <html> <head><title>{title}</title></head> <body> <h1>{title}</h1> <p>{text}</p> </body> </html> ''' # 数据字典 data = { 'title': 'My Home Page', 'text': 'Welcome to my home page!' } # 渲染模板 print(template.format_map(data))

输出效果:

<html> <head><title>My Home Page</title></head> <body> <h1>My Home Page</h1> <p>Welcome to my home page!</p> </body> </html>

3,4 format()配合**解包

除了format_map(),你还可以使用**将字典解包为关键字参数,效果相同:

print(template.format(**data))

两种方式的选择:

  • format_map(d)更直接,性能略优(省去解包过程)。

  • format(**d)更通用,也适用于其他需要关键字参数的场景

3,5 注意事项

  • 键必须存在:占位符中用到的所有键,必须在字典中有对应的值,否则抛出KeyError

  • 支持嵌套访问:字典中的值也可以是字典或对象,但占位符本身不支持直接写{a.b}这样的嵌套格式(如需嵌套,可结合format的自定义格式化器,但一般较少使用)。

  • 键名规范:占位符中的键名应遵循变量命名规则(字母、数字、下划线,不以数字开

4,字典方法

4,1clear()—— 清空字典

删除字典中所有键值对,原地修改,返回None。

d = {'name': 'Gumby', 'age': 42} d.clear() print(d) # {}

注意clear()会修改原字典本身。如果只是d = {},原字典若被其他变量引用,则不会被清空。

x = {'key': 'value'} y = x x.clear() print(y) # {} —— y 也被清空了

4,2copy()—— 浅复制

返回原字典的浅副本.

x = {'username': 'admin', 'machines': ['foo', 'bar']} y = x.copy() y['username'] = 'mlh' # 替换顶层值,不影响 x y['machines'].remove('bar') # 修改可变值(列表),影响 x print(x) # {'username': 'admin', 'machines': ['foo']}

浅复制的特点

  • 顶层键值对是独立副本

  • 但如果值是可变对象(列表、字典等),修改它会同时影响原字典.

解决方案:深复制

from copy import deepcopy d = {'names': ['Alfred', 'Bertrand']} dc = deepcopy(d) d['names'].append('Clive') print(dc) # {'names': ['Alfred', 'Bertrand']} —— 不受影响

4,3fromkeys()—— 创建带默认值的新字典

从键列表创建字典,值默认为None。

dict.fromkeys(['name', 'age']) # {'name': None, 'age': None}

4,4 get()—— 安全获取值(推荐)

访问键时若不存在,不会报错,而是返回None或指定的默认值。

d = {} print(d.get('name')) # None print(d.get('name', 'N/A')) # 'N/A'

4,5items()—— 返回键-值对视图

返回一个视图对象,包含所有(key, value)元组.

d = {'title': 'Python', 'url': 'http://python.org'} for key, value in d.items(): print(key, value)

视图是动态的:修改字典后,视图会自动更新。

it = d.items() d['spam'] = 0 print(('spam', 0) in it) # True

4,6keys()—— 返回所有键的视图

d = {'x': 1, 'y': 2} print(d.keys()) # dict_keys(['x', 'y'])

4,7pop()—— 弹出指定键的值

删除指定键并返回其值。

d = {'x': 1, 'y': 2} val = d.pop('x') print(val) # 1 print(d) # {'y': 2}

若键不存在会报错,建议配合默认值使用:

d.pop('z', None) # 安全删除

4,8 popitem()—— 随机弹出一项

删除并返回一个任意键值对(Python 3.7+ 返回最后插入的一项)

d = {'a': 1, 'b': 2} print(d.popitem()) # ('b', 2)

4,9setdefault()—— 获取值,若不存在则设置默认值

get()类似,但键不存在时会自动写入默认值.

d = {} d.setdefault('name', 'N/A') # 返回 'N/A',且 d['name'] = 'N/A' print(d) # {'name': 'N/A'}

若键已存在,则返回原值,不修改.

4,10update()—— 合并/更新字典

用另一个字典或键值对序列更新当前字典.

d = {'title': 'Python Web Site'} x = {'title': 'Python Language Website', 'url': 'http://python.org'} d.update(x) print(d) # {'title': 'Python Language Website', 'url': 'http://python.org'}

也支持关键字参数

d.update(a=1, b=2)

4,11 values() —— 返回所有值的视图

d = {'a': 1, 'b': 2, 'c': 1} print(d.values()) # dict_values([1, 2, 1])

值可以重复,不能直接通过值反查键.

总结:

字典是 Python 中最常用的数据结构之一,尤其在神经网络建模中:

  • 存储超参数配置

  • 管理模型状态

  • 作为缓存中间结果容器

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询