从字典中删除键值对

时间:2018-10-20 22:44:56

标签: python dictionary python-2.x

如果我有这样定义的Dict

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

我有一个aValue

16

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

我尝试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]

1 个答案:

答案 0 :(得分:1)

我个人认为构建一个 new 字典会更好,因为它更具“声明性”,并且更不容易出错:可能存在引用字典的对象,现在突然之间那本字典将会改变。

因此,您可以制作像这样的字典:

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 字典分配给相同的变量,但是可能链接到旧字典的其他属性,变量等将不会“看到”任何更改。

如果您确实要删除字典中的项目,则最好进行迭代并同时更改字典,您可以首先构造一个应删除的键列表,例如:

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]