python学习:字典
学习问题:如何删除字典中的一类元素
题目:删除字典friends中年龄大于23的friend
一个个删除明显达不到考察的目的,所以刚开始我的想法是:利用循环遍历字典中的数值进行判断
friends = {
'jialiang':23,
'wangChen':24,
'jiaMing':22,
'wangJie':22,
'yuQing':24,
'wenZhen':23,
'haoNan':25,
'luYi':23,
'boWen':23,
}
for n,y in friends.items(): #先用循环遍历字典
if y >= 23: #再用一个if来判断年龄大小
del friends[n] #接着删除符合年龄段的朋友
else:
print(f'{n}:{y}') #再一个个输出
然而程序出现错误
File "D:\pycharm\PyCharm Community Edition 2022.2.2\pythonProject\prctise.py", line 12, in <module>
for n,y in friends.items():
RuntimeError: dictionary changed size during iteration
发现在for循环中不能改变字典
于是通过学习了两种解法:
1.通过列表
sc = [] #创建一个空的列表
for n,y in friends.items():
if y >= 23:
sc.append(n) #将符合条件的y对应的n加入列表中
for a in sc: #再遍历列表
del friends[a] #此时便可以对字典进行删除
2.通过新字典
(1)删除
t = {}
t.update(friends)
for n,y in friends.items():
if y >= 23:
del t[n]
friends = t
通过创建新字典,将旧字典赋值给字典,在遍历旧字典是对新字典进行删除,最后将新字典的新值赋给旧字典,就达到了对旧字典的删除。
(2)添加
t = {}
for n,y in friends.item():
if y < 23:
t[n] = y
friends = t
同样创建一个字典,只不过变成了加入元素,而不是删除。
最后代码如下:
friends = {
'jialiang':23,
'wangChen':24,
'jiaMing':22,
'wangJie':22,
'yuQing':24,
'wenZhen':23,
'haoNan':25,
'luYi':23,
'boWen':23,
}
print("输出朋友的名字和年龄:")
for n,y in friends.items():
print(f'{n}:{y}')
print("\n输出朋友的名字:")
for n in friends.keys():
print(n)
print("\n输出朋友按字母排序的名字:")
for n in sorted(friends.keys()):
print(n)
print("\n输出朋友的年龄:")
for y in friends.values():
print(y)
print("\n去重年龄:")
for y in set(friends.values()):
print(y)
print("\n插入xiaoMing:")
friends['xiaoMing'] = 18
for n,y in friends.items():
print(f'{n}:{y}')
0
print("\n删去大于等于23岁的朋友:")
t = {}
t.update(friends)
for n,y in friends.items():
if y >= 23:
del t[n]
friends = t
for n,y in friends.items():
print(f'{n}:{y}')
原文地址:http://www.cnblogs.com/102204216zxf/p/16823263.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性