删除基于 dict.values() 的字典元素

Remove dictionary element based on dict.values()

如果字符串 'email' 不在 dict 值中,我想删除相应的元素,所以我做了以下操作:

[ my_dict.pop(k) for k , val in my_dict.items() if 'email' not in val ]

那么有更好的解决方案吗?
像上面那样写一大段代码好还是做下面的好:

    for k , val in my_dict.items():
        if 'email' not in val:
            my_dict.pop(k)

如果您不打算使用列表,请不要使用列表理解!同样,如果您不打算使用弹出的值,请不要使用 dict.pop。覆盖像 dict 这样的内置名称也不是一个好主意。更多 pythonic 将是:

for key, val in my_dict.items():
    if 'email' not in val:
        del my_dict[key]

您正在删除基于值的一个方面。在我看来,您的方法还不错,尤其是当您的可用内存紧张时。

另一种方法是字典理解,它应该稍微快一些但使用更多内存,因为您会将旧字典复制到新字典中:

my_dict = {key: val for key, val in my_dict.items() if 'email' not in val}

据我所知,在 Python 2.7 中已经引入了像这样的字典推导式。或者,您也可以这样做:

dict = my_dict([(key, val) for key, val in my_dict.items() if 'email' not in val])

我建议您根据字典的预期大小和内存限制在您当前的方法和我的方法之间进行选择。