Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于列表中的元素从Python字典中删除元素?_Python_List_Dictionary - Fatal编程技术网

如何基于列表中的元素从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)