如何基于列表中的元素从Python字典中删除元素?
我有一个元组列表:如何基于列表中的元素从Python字典中删除元素?,python,list,dictionary,Python,List,Dictionary,我有一个元组列表: lst=[(6, 'C'), (6, 'H'), (2, 'C'), (2, 'H')] 还有一本字典: dct={'6C': (6, 'C'), '6H': (6, 'H'), '9D': (9, 'D'), '10D': (10, 'D'), '11S': (11, 'S'), '2C': (2, 'C'), '2H': (2, 'H')} 如何从字典中删除列表中的元素?在本例中,我希望的输出是: dct2={'9D': (9, 'D'), '10D': (10, '
lst=[(6, 'C'), (6, 'H'), (2, 'C'), (2, 'H')]
还有一本字典:
dct={'6C': (6, 'C'), '6H': (6, 'H'), '9D': (9, 'D'), '10D': (10, 'D'), '11S': (11, 'S'), '2C': (2, 'C'), '2H': (2, 'H')}
如何从字典中删除列表中的元素?在本例中,我希望的输出是:
dct2={'9D': (9, 'D'), '10D': (10, 'D'), '11S': (11, 'S')}
如果您使用的是Python 2,请尝试以下方法:
for key, value in dct.items():
if value in lst:
del dct[key]
编辑:
同时适用于Python 2和Python 3的解决方案:
dict((key, value) for key, value in dct.items() if value not in lst)
我会使用字典理解将键映射到列表中找不到的值:
new_dict = {k: v for k, v in old_dict.items() if v not in the_list} # filter from the list
我会在过滤掉元素之前设置
lst
,因为数据结构让您可以测试元素是否更有效地存在
purge_set = set(lst)
dict(filter(lambda (k, v): v not in purge_set, dct.iteritems()))
使用:
1.在列表上迭代。2.将列表对连接到键中。3.使用key从字典中删除元素。dct的键和值之间是否存在关系,我看到连接值将导致相应的键?我将编辑您的第一个解决方案,以迭代
dict.items()
@MalikBrahimi的副本。这说明了它的质量,Iguess@MalikBrahimi迭代dict.items()的副本
Python 2中不需要此功能,您确定吗?无论版本如何,迭代时的变异都是不允许的。在Python 2中,使用dict.items()
上的copy
不会增加任何关于安全性的内容,因为它已经返回了元组列表,不是迭代器。直接使用\uuu\dunder\uuu
方法通常是个坏主意。实际上,要看到元组和集合之间的contains的性能差异,您需要走很长的路。对于大型数据集,最好避免循环。
from toolz import valfilter
valfilter(lst.__contains__, dct)