如果我有这样定义的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]
答案 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]
或者在python-2.x中,我们可以使用.items()
,因为这是list
:
# do *not* use this in Python-3.x
for k in aDict.items():
if v < aValue:
del aDict[k]