Python学习日记3

一 ,使用字符串

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

二,字典

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 中最常用的数据结构之一,尤其在神经网络建模中:

  • 存储超参数配置

  • 管理模型状态

  • 作为缓存中间结果容器

相关推荐
hsjiasb2 小时前
FreeRTOS学习(三十九)——最终总结
学习·学习笔记·freertos
m4Rk_3 小时前
【论文阅读】Agent 记忆机制(47):Nemori——用“预测误差”判断什么经验值得被记住
论文阅读·人工智能·学习·开源·github
约克33 小时前
2024年空调除甲醛技术参数与性能评测解析
学习
kkkkkkkkkk_Z4 小时前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
kdxiaojie6 小时前
Linux USB驱动阅读笔记(1)
linux·笔记·学习·usb
呼噜想睡觉6 小时前
Bootstrap3完成从导航到页脚完整页面开发
学习
深蓝海拓9 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十五)后续完善和改进:PLC端数据解析的防粘包、残包、废包、拆包
笔记·学习·plc
小黄蚁9 小时前
LVGL学习笔记(六)
笔记·学习
zyf1044169 小时前
暑期实践日志 Day33:整体复盘核查视频,完善剪辑成果
学习·计算机网络·剪辑·暑期实践·课题任务