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的顺序是有保证的