【问题标题】:Dictionary sized change due to iteration of dict由于 dict 的迭代,字典大小发生变化
【发布时间】:2023-01-21 12:20:20
【问题描述】:

当子字典与另一个字典中的值匹配时,我试图从字典中删除键值对。

示例设置:

e = {'a':{'aa':'yes'}, 'b':{'ac':'no'}, 'a':{'aa':'yes'}}
f = {'a':{'aa':'yes'}, 'e':{'ab':'no'}, 'a':{'aa':'yes'}}

for keys, values in e.items():
    for k, v in f.items():
        if values.get('aa') == v.get('aa'):
            e.pop(keys)

RuntimeError:字典在迭代期间改变了大小

预期结果:

#from
e = {'a':{'aa':'yes'}, 'b':{'ac':'no'}, 'a':{'aa':'yes'}}

#to
e = {'b':{'ac':'no'}}

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    是的,您不能修改正在迭代的字典,最直接的解决方案是迭代要修改的字典的.copy

    e = {'a':{'aa':'yes'}, 'b':{'ac':'no'}, 'c':{'aa':'yes'}}
    f = {'a':{'aa':'yes'}, 'e':{'ab':'no'}, 'c':{'aa':'yes'}}
    
    for keys, values in e.copy().items():
        for k, v in f.items():
            if values.get('aa') == v.get('aa'):
                e.pop(keys)
                break  # because keys is no longer in e
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2023-04-02
      • 1970-01-01
      • 2022-11-07
      相关资源
      最近更新 更多