从字典中删除键值对

removing key,value pairs from a dictionary

如果我有这样定义的字典

{'1': 6, '2': 15, '3': 16, '4': 71, '5': 33}

我有一个值

16

如何删除所有包含值 < aValue 的 key/value 对?

我试过 pop 失败了。我可能只需将值更改为 0,但即使这样做也会给我 RuntimeError: dictionary changed size during iteration

我真正想要的是这样的输出

{'3': 16, '4': 71, '5': 33}

切片和字典理解现在有点超出我的理解范围,我当前的非工作代码是:

for k, v in aDict.iteritems():
    if v < aValue:
        del aDict[k]

我个人认为构建一个 new 字典更好,因为这样更 "declarative",而且更不容易出错:可以有对象引用字典,现在突然间那个字典会改变。

所以你可以像这样制作字典:

aDict = { k: v for k, v in aDict.iteritems() if v >= aValue }

这产生:

>>> { k: v for k, v in aDict.iteritems() if v >= aValue }
{'3': 16, '5': 33, '4': 71}

我们因此将 new 字典分配给同一个变量,但是可能 link 到旧字典的其他属性、变量等不会 "see" 任何变化。

如果确实要删除字典中的项,最好不要同时迭代和更改字典,您可以先构造一个应该删除的键列表, 比如:

ks = [k for k in aDict.iteritems() if v < aValue]
for k in ks:
    del aDict[k]

,我们可以使用 .items() 因为这是 list:

# do *not* use this in Python-3.x
for k in aDict.items():
    if v < aValue:
        del aDict[k]