- images
- results
- .gitignore
- 1.1概论.ipynb
- 1.2 环境配置.pdf
- 1.3数据类型.ipynb
- 1.4 人机交互.ipynb
- 1.5 对象与变量.ipynb
- 1.6 编码与命名规范.ipynb
- 2.1 数值类型.ipynb
- 2.2 数值类型转换.ipynb
- 2.3 数值元算.ipynb
- 2.4常用数学运算函数.ipynb
- 2.5 math 模块及其应用.ipynb
- 2.6.1 逻辑值测试.ipynb
- 2.6.2 成员运算.ipynb
- 2.6.3 比较运算.ipynb
- 2.6.4 布尔运算.ipynb
- 2.6.5 运算优先级.ipynb
- 2.ipynb
- 3.1 流程控制结构.ipynb
- 3.3.1 for 循环语句.ipynb
- 3.3.3 rang.ipynb
- 3.3.3 while 循环语句.ipynb
- 3.4 and 3.5 分支结构和条件.ipynb
- 3.6 and 3.7 .ipynb
- 3.9 异常处理.ipynb
- 4 函数和模块化编程.ipynb
- 4.1 函数的定义、调用与返回值.ipynb
- 4.2 函数的参数传递.ipynb
- 4.3 变量的作用域.ipynb
- 4.4 匿名函数.ipynb
- 4.5 递归.ipynb
- 4.6 内置函数.ipynb
- 4.7 模块化程序设计.ipynb
- 5.1 序列通用操作.ipynb
- 5.1.1 索引.ipynb
- 5.1.2 切片.ipynb
- 5.1.3 序列拼接与重复.ipynb
- 5.1.4 成员测试.ipynb
- 5.2.1 字符串的创建.ipynb
- 5.2.2 字符串常量.ipynb
- 5.2.4 字符串的遍历.ipynb
- 5.2.5 文件遍历.ipynb
- 5.2.6 字符串的处理方法.ipynb
- 5.2.7 字符串格式化.ipynb
- 5.2.8 转义字符.ipynb
- 5.3 random 模块及其应用.ipynb
- 6.1 元组.ipynb
- 6.2 列表.ipynb
- 6.2.1 列表的创建.ipynb
- 6.2.2 列表的更新.ipynb
- 6.2.3 列表的删除.ipynb
- 6.2.4 列表的排序.ipynb
- 6.2.5 列表赋值与复制.ipynb
- 6.2.6 列表推导式.ipynb
- 6.2.8 常用内置函数.ipynb
- 6.2.9 列表嵌套及其排序.ipynb
- 6.3 列表综合应用.ipynb
- 7.1.1 集合的创建.ipynb
- 7.1.2可变集合类型的操作.ipynb
- 7.1.3 成员关系.ipynb
- 7.1.4 集合关系.ipynb
- 7.1.5 集合运算.ipynb
- 7.2.1 字典创建.ipynb
- 7.2.2 获取字典值.ipynb
- 7.2.3 修改字典值.ipynb
- 7.2.4内置函数与方法.ipynb
- 7.2.5字典排序输出.ipynb
- 7.3 集合与字典的应用.ipynb
- 8 中 numpy 概述.ipynb
- 8 中panda 库.ipynb
- 8.1 文件的打开与关闭.ipynb
- 8.2 文件读写操作.ipynb
- 8.3 文件的应用.ipynb
- 8.4 numpy 文件操作.ipynb
- 8.4.2 and 3.ipynb
- 8.5.1 pandas文件读写.ipynb
- 8.5.2 and 3 and 4.ipynb
- 9.1 matplotlib 线性图.ipynb
- 9.1.5 数据文化绘图.ipynb
- 9.2 非线性图.ipynb
- 9.3 词云.ipynb
- _overview.md
- _readme.ipynb
- coding_here.ipynb
- dream.png
- score.txt
- score_total.csv
- 成绩分析综合.json
7.2.3 修改字典值.ipynb @master — view markup · raw · history · blame
修改字典值¶
字典是一种可变的数据类型,支持数据元素的增加、删除和修改操作。仍以通讯录为例,在使用的过程中,可能需要向数据里插入新的联系人数据、更新原有的联系人的姓名或电话、删除其中的数据。
元素值的修改与新增¶
- ### 使用dict[key] = value方法
当键名key在字典中存在时,将修改字典dict中键key的值为新值value;
当键名key在字典中不存在时,将为字典增加以key为键,以value为值的新元素。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
# 键存在时更新
tel_book['李明'] = '13988887788' # 李明的电话更新为 '13988887788'
tel_book['赵雪'] = '13000112222' #新增元素 '赵雪': '13000112222'
print(tel_book) # {'李明': '13988887788', '张宏': '13866668888', '赵雪': '13000112222'}

- ### 使用dict.update(k1=v1[, k2=v2,…])方法
可以用dict.update(k1=v1[, k2=v2,…])方法同时更新字典中的多个值:
当字典dict中存在k1、k2…时,将对应的值修改为v1、v2…;
当不存在相应的键值时,会将对应的k1:v1、k2:v2…键值对加入字典。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
# 将张宏的电话更新为'13866668877' ;'王晶'不存在,以键值对形式加入到字典中
tel_book.update(张宏='13866668877', 王晶='13244441111')
print(tel_book) # {'李明': '13988887777', '张宏': '13866668877', '王晶': '13244441111'}

- ### 使用dict.update([other])方法
接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。
当other中的键在字典dict中存在时,将修改为对应的值;
当other中的键在字典dict中不存在时,将键值对加入字典dict。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book2 = {'李明': '13988887788', '程钱': '13111223214'}
tel_book.update(tel_book2)
print(tel_book)

tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book2 = [('李明', '13988887788'), ('程钱', '13111223214')]
tel_book.update(tel_book2) # 也可使用包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象
print(tel_book)

- ### 使用dict.setdefault(key[, value])方法
当字典dict 中存在键key时,返回key对应的值;
键key不存在时,在字典中增加 key: value 键值对,值value缺省时,默认设其值为None。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book.setdefault('刘飞','13344556655') # 为字典新增元素 '刘飞': '13344556655'
tel_book.setdefault(('程钱')) # 值缺省时,默认为None,为字典新增元素'程钱': None
print(tel_book)
phone_number = tel_book.setdefault('李明') # 存在键'李明',返回其值'13988887777'
print(phone_number)

+ ### 使用运算符“|”和 “|=”
Python 3.9 以后版本新增
d | other:合并 d 和 other 中的键和值来创建一个新的字典,两者必须都是字典。当 d 和 other 有相同键时, other 的值优先。
d |= other:用 other 的键和值更新字典 d ,other 可以是字典或可迭代的键值对。当 d 和 other 有相同键时, other 的值优先。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book2 = {'刘飞': '13344556655', '程钱': '13111223214'}
tel = tel_book | tel_book2
print(tel)

tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book2 = {'刘飞': '13344556655', '程钱': '13111223214'}
tel_book |= tel_book2
print(tel_book)

字典元素的删除¶
- ### 使用dict.pop(key[, default])方法
将键为 key 的键值对元素删除,返回值为键 key 对应的值;
如果提供了default 值,dict 中不存在 key 键时返回 default,否则将会触发“KeyValue”异常。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del_key = tel_book.pop('张宏')
print('删除的联系人的电话是:', del_key)

tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del_key = tel_book.pop('李宏', '用户不存在')
print('删除的联系人的电话是:', del_key)

tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del_key = tel_book.pop('李宏') # 未设置default 值,将会触发“KeyValue”异常
print('删除的联系人的电话是:', del_key)
- ### 使用dict.popitem()方法
从字典中移除并返回一个元组形式的(键, 值) 对,
键值对会按LIFO(Last In, First Out, 后进先出)顺序被返回,即每次执行删除位于字典末尾的键值对。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
delitem = tel_book.popitem()
print('删除的联系人是:',delitem)

如果字典为空,调用 popitem() 将引发 KeyError。
tel_book = {}
delitem = tel_book.popitem()
print('删除的联系人是:',delitem)
- ### 使用dict.clear()方法
清空字典dict中所有数据,保留空字典对象。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
tel_book.clear() # 清空字典中的所有数据
print(tel_book) # {}

- ### 使用del dict[key]指令
将字典dict中键为key的键值对元素删除,如果不存在键key则会引发 KeyError。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del tel_book['张宏'] # 删除键为'张宏'的键值对
print(tel_book)

tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del tel_book['李小明'] # 键'李小明'不存在,引发KeyError
print(tel_book)
- ### 使用del dict指令
将字典对象dict删除,后续如果再次引用该对象将引发NameError。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
del tel_book # 删除名为tel_book的字典对象
print(tel_book) # 触发NameError异常
“视图”可迭代数据¶
使用字典keys()、values()和items()方法生成的可迭代数据是一种特殊的“视图”类数据,这三个方法可以分别获得一个包含字典全部键、值和键值对的对象。
它们的值关联至原始字典,**当原始字典中的数据发生改变时,其值也会发生变化**。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
ks = tel_book.keys()
vs = tel_book.values()
kvs = tel_book.items()
print(ks) # dict_keys(['李明', '张宏'])
print(vs) # dict_values(['13988887777', '13866668888'])
print(kvs) #dict_items([('李明', '13988887777'), ('张宏', '13866668888')])
tel_book.update(王晶='13244441111') #键‘王晶’不存在,将键值对加入字典
print(tel_book) #{'李明': '13988887777', '张宏': '13866668888', '王晶': '13244441111'}
print(ks) #print(ks) dict_keys(['李明', '张宏', '王晶'])
print(vs) #dict_values(['13988887777', '13866668888', '13244441111'])
print(kvs) #dict_items([('李明', '13988887777'), ('张宏', '13866668888'), ('王晶', '13244441111')])

Python 3.7版之后:,字典顺序会确保为插入顺序,因此这三个方法的返回值也按插入顺序,可以进行如下相关操作。
tel_book = {'李明': '13988887777', '张宏': '13866668888'}
ks = tel_book.keys()
vs = tel_book.values()
kvs = tel_book.items()
print(len(kvs)) # 可使用len()函数获取元素个数
print(list(zip(ks, vs))) # 允许使用zip()来创建 (值, 键) 对
print([(k, v) for (k, v) in kvs]) # 允许使用推导式来创建 (值, 键) 对
print(('李明', '13988887777') in kvs) # 支持成员检测
print(list(reversed(kvs))) # 支持逆序,返回一个逆序获取字典键、值或项的迭代器。
遍历字典时,若字典元素被删除,会导致字典长度发生变化而导致异常:
删除字典中特定元素¶
tel_book = {'李明': '13988887777', '张宏': '13866668888', '李小明': '13988886666', '李广': '13988885555', }
# 删除字典中姓“李”的人的元素
for user_name in tel_book: # RuntimeError: dictionary changed size during iteration
if user_name[0] == '李':
tel_book.pop(user_name)
print(tel_book)
因字典的视图会随字典元素变化而发生变化,所以也不可以通过遍历字典视图的方法删除字典中的元素。
tel_book = {'李明': '13988887777', '张宏': '13866668888', '李小明': '13988886666', '李广': '13988885555', }
# 删除字典中姓“李”的人的元素
for user_name in tel_book.keys(): # RuntimeError: dictionary changed size during iteration
if user_name[0] == '李':
tel_book.pop(user_name)
print(tel_book)
为避免这个问题,推荐两个方法:
将字典的视图转为列表再用于控制遍历:¶
tel_book = {'李明': '13988887777', '张宏': '13866668888', '李小明': '13988886666', '李广': '13988885555', }
# 删除字典中姓“李”的人的元素
for user_name in list(tel_book.keys()): # RuntimeError: dictionary changed size during iteration
if user_name[0] == '李':
tel_book.pop(user_name)
print(tel_book)
通过字典推导式的方法创建新的字典:¶
新字典元素是删除是过滤掉特定元素后的结果
tel_book = {'李明': '13988887777', '张宏': '13866668888', '李小明': '13988886666', '李广': '13988885555', }
# 删除字典中姓“李”的人的元素
tel_book_new = {x[0]: x[1] for x in tel_book.items() if x[0][0] != '李'}
print(tel_book_new) # {'张宏': '13866668888'}
建议遍历时,直接用两个变量,可避免索引的使用,使程序更容易理解:¶
tel_book = {'李明': '13988887777', '张宏': '13866668888', '李小明': '13988886666', '李广': '13988885555', }
# 删除字典中姓“李”的人的元素
tel_book_new = {k: v for k, v in tel_book.items() if k[0] != '李'}
print(tel_book_new) # {'张宏': '13866668888'}