Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 如何检查dict是否在dict的键和值上的字典列表中,dict可以嵌套在其中?_Python_Python 3.x_Dictionary Comprehension - Fatal编程技术网

Python 如何检查dict是否在dict的键和值上的字典列表中,dict可以嵌套在其中?

Python 如何检查dict是否在dict的键和值上的字典列表中,dict可以嵌套在其中?,python,python-3.x,dictionary-comprehension,Python,Python 3.x,Dictionary Comprehension,我想检查字典列表中是否存在整个字典(键和值)。每个词典都可以是词典和列表的嵌套词典 当我有很多标量要检查每个标量是否存在于标量的目标列表中时,我通常将目标列表设置为一个集合,并检查集合中是否存在标量,如集合中的标量(标量列表)。(如果这不是最好的方式,请告诉我) 对于dict,我不能执行我的dict in set(dict的列表),因为这会引发不可损坏的类型:“dict” 如果存在相同的键名但值不同(这是我想要的),则在dicts的列表中执行my_dict似乎会正确返回False,但我担心运行时

我想检查字典列表中是否存在整个字典(键和值)。每个词典都可以是词典和列表的嵌套词典

当我有很多标量要检查每个标量是否存在于标量的目标列表中时,我通常将目标列表设置为一个集合,并检查集合中是否存在标量,如
集合中的标量(标量列表)
。(如果这不是最好的方式,请告诉我)

对于dict,我不能执行
我的dict in set(dict的列表)
,因为这会引发
不可损坏的类型:“dict”

如果存在相同的键名但值不同(这是我想要的),则在dicts的列表中执行
my_dict
似乎会正确返回
False
,但我担心运行时;python是否在内部对此进行了优化?我还能做什么

编辑:假设我将执行许多查找,并使用Python3.7

为了检查标量列表中是否存在标量,我通常将列表设置为一个集合,并检查集合中是否存在标量,如集合中的标量(标量列表)。(如果这不是最好的方式,请告诉我)

集合的创建将是一个O(n)操作。集合中的每个后续查找都是O(1)平均情况,因此如果您计划执行许多查找,那么这是值得的。否则,如果只执行一次查找,则最好在列表中执行线性搜索(假设其未排序)

对于dicts,我不能在set中做我的dicts(dicts列表),因为 引发不可损坏的类型:“dict”。但是我的字典在字典列表中运行 很好,但我关心的是运行时

如果您需要重复执行此查找,那么根据您在这些字典中存储的内容的性质,您可能需要重新考虑使用字典,并选择对象。然后你可以为你的对象定义一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu散列
方法并将它们存储在一个集合中,这样查找就会容易得多

python是否在内部对此进行了优化?我还能做什么


您可以在此处查看Python数据结构操作的时间复杂性:。Python无法在泛型列表中优化泛型搜索,它将使用线性搜索行为(O(n))。

要优化多个查找,您可以在一组哈希字典中进行搜索和搜索:

l = [{1:2,3:4}, {5:6,7:8}]
setofdicts = set(map(hashabledict, l))
hashabledict({5:6,7:8}) in setofdicts
#True

集合中的标量(标量列表)
似乎不如简单的
标量列表中的标量
简洁。如果您想“但是集合的成员资格测试不是比列表快吗?”,这是真的,但是您也在从一个列表转换到另一个集合,所以您损失的时间比获得的时间多。如果您想任意深入地递归以查找dict,我不建议使用
my_dict in list_of_dict
。例如,[{3:{1:2}]中的
{1:2}给出False。dict是由python简单类型组成的吗?ie(int/list/tuple/dict/str),如果是,您使用的是什么python版本?dict可以嵌套(dict和list的dict)。我使用的是Python3,如果你知道dicts来自哪里,你可以用同样的方式来订购dicts,你可以在3.6+中滥用dicts的机制,在str(dicts的列表)中使用
str(needle\u dicts)
,因为在3.6+中,dicts的顺序是有保证的