【问题标题】:Deleting keys in a dictionary stops a loop and raises error删除字典中的键会停止循环并引发错误
【发布时间】:2013-07-11 15:18:42
【问题描述】:

在我的代码中,我遍历字典中的键,如果键与条件匹配(存在于另一个列表中),则删除键值对:

for key in my_dict:
    if key in my_list:
        del my_dict[key]

问题是,当我运行代码时出现错误:'字典在迭代期间更改了大小'。 我意识到我不能这样做:

for i in range(len(my_dict)):...

因为我的字典中的关键索引会随着每次删除而改变。

有没有办法在不引发错误的情况下删除字典中的元素?

【问题讨论】:

  • 如果可能的话,提供一个公平的样本会很棒。它节省了另一端的时间,并且在大多数情况下可以提前响应。

标签: python dictionary key


【解决方案1】:

你不需要遍历你的字典。

lst  = ['4','8','15','16','23','42']
dct  = {'4':4, 'foo':'bar'}
keys = dct.keys()

for key in lst:
    if key in keys:
        dct.pop(key)

【讨论】:

    【解决方案2】:

    没有必要遍历字典中的所有键

    for key in my_list:
        my_dict.pop(key, None)
    

    会做的。

    pop 此处将删除该项目(如果存在),但如果 my_list 中有不在字典中的键,则不会引发异常。

    【讨论】:

      【解决方案3】:

      这个问题的答案需要复制字典。我相信你需要写一个小函数。请参阅this 线程。

      【讨论】:

        【解决方案4】:

        您应该首先创建 dict(my) 的副本:

        my = {2:5, 3:4, 7:9}
        lst = [2,7]
        del_my = dict(my)
        
        
        for i in my:
            if i in lst:
                del del_my[i]
        
        
        print del_my
        

        【讨论】:

          猜你喜欢
          • 2018-09-18
          • 1970-01-01
          • 2020-05-14
          • 1970-01-01
          • 2020-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多