从字典中删除键值对
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]
或 python-2.x,我们可以使用 .items()
因为这是 list
:
# do *not* use this in Python-3.x
for k in aDict.items():
if v < aValue:
del aDict[k]
如果我有这样定义的字典
{'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]
或 python-2.x,我们可以使用 .items()
因为这是 list
:
# do *not* use this in Python-3.x
for k in aDict.items():
if v < aValue:
del aDict[k]