如何删除字典中的一个元素?¶
字典是存储key-values形式的数据, 如果遇到删除其字典中的数据,如何进行操作。
通常我们都是按key值进行操作, 例如从字典中删除某一条记录并返回这条记录,采用pop的方法。 返回其值。 另外一个是直接指定其键值进行删除, 示例如下:
books.pop("a")
del books["a"]
我们偶尔会遇到按值进行删除的情况,我们如何操作? 字典没有提供按值进行删除的函数, 通常会想到的方法是进行迭代查找,并在迭代查找过程中进行删除操作,我们编写代码验证是否正确。
prov = {'beijing': 2300, 'tianjin': 1400, 'shanghai': 2200, 'chongqing': 3000}
#错误用法
for k in prov.keys():
print(k, prov[k])
if(prov[k]>=2300):
prov.pop(k)
执行之后会提示以下错误
Traceback (most recent call last):
File "C:\zhang\code\python\code\container\dict_del.py", line 7, in <module>
for k in prov.keys():
RuntimeError: dictionary changed size during iteration
字典在迭代时不能修改其大小。那我们如何进行删除呢?我们只能通过两步进行操作,首先 进行迭代查找,并把找到的key值放到一个集合中;然后对集合中的元素进行遍历,删除字典 中的指定下标的元素。代码如下:
del_k = set() #构造一个空的待删除的key集合
for k in prov:
print(k, prov[k])
if(prov[k]>=2300):
del_k.add(k)
#进行删除
for k in del_k:
del prov[k]
#进行验证是否删除
for k in prov:
print(k, prov[k])
从这里我们学到了,字典在迭代时不能进行删除操作,甚至不能修改其字典大小。