-2

我想知道这是否是从字典中有条件地删除项目的正常方法。下面的代码不报错。只是想知道它是否安全。

dict_items = {'a':1, 'b':2}

for key, value in dict_items.copy().items():
    if some_condition:
       del dict_items[key]

这里我使用 copy() 函数来避免对原始字典进行操作。

编辑:根据建议,我做了以下事情:

for key in list(dict_items.keys())
        value = dict_items[key]
        if some_condition:
           del dict_items[key]

这应该更便宜并且仍然安全吗?

4

2 回答 2

2

这是一种合理的做法。

另一种方法是创建一个具有反转条件的字典理解的新字典。

dict_items = {key: value for key, value in dict_items.items() if not some_condition}
于 2021-09-03T18:59:36.307 回答
1

这当然是从字典中删除条目的安全方法。但是复制整个字典可能会很昂贵,因此最好将要删除的键保存在第一个循环中,然后再删除它们:

to_be_deleted = []
for key, value in dict_items.items():
    if some_condition:
        to_be_deleted.append(key)

for key in to_be_deleted:
    del dict_items[key]
于 2021-09-03T18:59:43.417 回答