我会天真地使用:
for k, v in dictionary.items():
if foo(v):
del dictionary[k]
但是,这将导致迭代器异常,因为我在对其进行迭代时编辑字典大小。那我该怎么办呢? -特别是在不复制字典的情况下,使用复制方法:
copydict = dict(dictionary)
for k, v in copydict.items():
if foo(v):
del dictionary[k]
我希望看到python如何在不实际使用显式迭代器的情况下进行此类编辑。
最佳答案
找到所有要删除的密钥,然后在之后删除:
d = {1: 2, 3: 4, 5: 6}
remove = [k for k in d if foo(d[k])]
for k in remove:
del d[k]
In [38]: %%timeit
....: d = {1: 2, 3: 4, 5: 6}
....: matching_items = ((k, v) for k, v in list(d.items()) if v > 2)
....: d.clear()
....: d.update(matching_items)
....:
100000 loops, best of 3: 2.85 µs per loop
In [40]: %%timeit
d = {1: 2, 3: 4, 5: 6}
remove =[k for k in d if d[k]> 2]
for k in remove:
del d[k]
....:
1000000 loops, best of 3: 873 ns per loop
关于python - Python从字典中删除项目谁的值适合函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26557914/