如何删除字典中的一个元素?

字典是存储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])

从这里我们学到了,字典在迭代时不能进行删除操作,甚至不能修改其字典大小。