一 ,使用字符串
这一章节内容由于之前笔记网络出现问题未保存就不再次写了
二,字典
1,字典的用途
字典(dict)是Python中非常重要的一种数据结构,它的设计灵感来源于我们日常使用的字典------通过"单词"(键)快速查找"含义"(值)。
适用场景:存储棋盘状态(键为坐标元组,值为棋子信息);记录文件修改时间(键为文件名,值为时间戳);实现电话簿、地址簿等快速查找功能。
对比列表 :列表适合按顺序存储和访问,通过下标索引;字典通过键来访问,更直观、更高效
示例:
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)基本语法
-
字典用花括号
{}表示。 -
每个项由 键: 值 组成,项之间用逗号分隔。
-
空字典:
{}
python
phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
注意:键必须唯一,但是值可以重复
(2)使用dict()函数创建字典
python
# 从键-值对序列创建
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)字典与列表的区别

示例:
python
#字典自动添加新建
x = {}
x[42] = 'Foobar'
print(x) # {42: 'Foobar'}
#列表会报错
x = []
x[42] = 'Foobar' # IndexError
效率提示:检查字典是否包含某个键,比列表检查是否包含某个值要快得多,尤其在数据量较大时
(5)综合示例
简单的电话数据库
python
# 数据库:每个人是一个字典,包含电话和地址
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.")
运行结果示例:
python
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() 方法时,传入一个字典,字符串中的占位符字段名会自动匹配字典的键。
python
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 页面、邮件内容、配置文件等.
python
# 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))
输出效果:
python
<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(),你还可以使用 ** 将字典解包为关键字参数,效果相同:
python
print(template.format(**data))
两种方式的选择:
-
format_map(d)更直接,性能略优(省去解包过程)。 -
format(**d)更通用,也适用于其他需要关键字参数的场景
3,5 注意事项
-
键必须存在 :占位符中用到的所有键,必须在字典中有对应的值,否则抛出
KeyError。 -
支持嵌套访问 :字典中的值也可以是字典或对象,但占位符本身不支持直接写
{a.b}这样的嵌套格式(如需嵌套,可结合format的自定义格式化器,但一般较少使用)。 -
键名规范:占位符中的键名应遵循变量命名规则(字母、数字、下划线,不以数字开
4,字典方法
4,1 clear() ------ 清空字典
删除字典中所有键值对,原地修改 ,返回 None。
python
d = {'name': 'Gumby', 'age': 42}
d.clear()
print(d) # {}
注意 :clear() 会修改原字典本身。如果只是 d = {},原字典若被其他变量引用,则不会被清空。
python
x = {'key': 'value'}
y = x
x.clear()
print(y) # {} ------ y 也被清空了
4,2 copy() ------ 浅复制
返回原字典的浅副本.
python
x = {'username': 'admin', 'machines': ['foo', 'bar']}
y = x.copy()
y['username'] = 'mlh' # 替换顶层值,不影响 x
y['machines'].remove('bar') # 修改可变值(列表),影响 x
print(x) # {'username': 'admin', 'machines': ['foo']}
浅复制的特点:
-
顶层键值对是独立副本
-
但如果值是可变对象 (列表、字典等),修改它会同时影响原字典.
解决方案:深复制
python
from copy import deepcopy
d = {'names': ['Alfred', 'Bertrand']}
dc = deepcopy(d)
d['names'].append('Clive')
print(dc) # {'names': ['Alfred', 'Bertrand']} ------ 不受影响
4,3 fromkeys() ------ 创建带默认值的新字典
从键列表创建字典,值默认为 None。
python
dict.fromkeys(['name', 'age'])
# {'name': None, 'age': None}
4,4 get()------ 安全获取值(推荐)
访问键时若不存在,不会报错,而是返回 None 或指定的默认值。
python
d = {}
print(d.get('name')) # None
print(d.get('name', 'N/A')) # 'N/A'
4,5 items() ------ 返回键-值对视图
返回一个视图对象 ,包含所有 (key, value) 元组.
python
d = {'title': 'Python', 'url': 'http://python.org'}
for key, value in d.items():
print(key, value)
视图是动态的:修改字典后,视图会自动更新。
python
it = d.items()
d['spam'] = 0
print(('spam', 0) in it) # True
4,6 keys() ------ 返回所有键的视图
python
d = {'x': 1, 'y': 2}
print(d.keys()) # dict_keys(['x', 'y'])
4,7 pop() ------ 弹出指定键的值
删除指定键并返回其值。
python
d = {'x': 1, 'y': 2}
val = d.pop('x')
print(val) # 1
print(d) # {'y': 2}
若键不存在会报错,建议配合默认值使用:
python
d.pop('z', None) # 安全删除
4,8 popitem()------ 随机弹出一项
删除并返回一个任意键值对(Python 3.7+ 返回最后插入的一项)
python
d = {'a': 1, 'b': 2}
print(d.popitem()) # ('b', 2)
4,9 setdefault() ------ 获取值,若不存在则设置默认值
与 get() 类似,但键不存在时会自动写入默认值.
python
d = {}
d.setdefault('name', 'N/A') # 返回 'N/A',且 d['name'] = 'N/A'
print(d) # {'name': 'N/A'}
若键已存在,则返回原值,不修改.
4,10 update() ------ 合并/更新字典
用另一个字典或键值对序列更新当前字典.
python
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'}
也支持关键字参数
python
d.update(a=1, b=2)
4,11 values() ------ 返回所有值的视图
python
d = {'a': 1, 'b': 2, 'c': 1}
print(d.values()) # dict_values([1, 2, 1])
值可以重复,不能直接通过值反查键.
总结:
字典是 Python 中最常用的数据结构之一,尤其在神经网络建模中:
-
存储超参数配置
-
管理模型状态
-
作为缓存 或中间结果容器