查找列表和集合之间的区别



我正在尝试找到MongoDB记录之间的差异。执行查询后,我最终得到了一组独特的结果(通过应用set()(。

现在,我想将新的提取与我刚刚定义的集合进行比较,以查看记录是否有任何新添加。

我现在所做的就是以下内容:

unique_documents = set([str(i) for i in dict_of_uniques[my_key]])
all_documents = [str(i) for i in (dict_of_all_docs[my_key])]

基本上,我试图比较两个变量中的dict的字符串版本。

我有几种方法,其中包括unique_documents.difference(all_documents),但它不断返回空套。我知道一个事实是,all_documents变量包含记录中的两个新条目。我想知道它们是哪个。

谢谢,

如果 all_documents是带有新元素的集合,则需要将参数的顺序转换为 difference方法。

unique_documents = set([str(i) for i in dict_of_uniques[my_key]])
all_documents = set([str(i) for i in (dict_of_all_docs[my_key])])
all_documents.difference(unique_documents)

查看顺序如何至关重要:

>>> x = set([1,2,3])
>>> y = set([3,4,5])
>>> x.difference(y)
{1, 2}
>>> y.difference(x)
{4, 5}

difference为您提供了 first 集的元素,这些 sec中不存在于 second set。

如果您想查看已添加的删除的内容,则可以symmetric_difference。该函数被描述为"对称",因为它给出了相同的结果,而不论参数顺序如何。

>>> x.symmetric_difference(y)
{1, 2, 4, 5}
>>> y.symmetric_difference(x)
{1, 2, 4, 5}

如果没有词典结构的描述,就很难说出,但是您的代码似乎仅比较单键。如果要比较两个字典的内容,则需要获取所有值:

currentData = set( str(rec) for rec in dict_of_all_docs.values() )
changedKeys = [k for k,value in dict_of_fetched.items() if str(value) not in currentData]

这似乎不是很有效,但是如果没有更多有关数据结构的信息,就很难提出更好的建议。如果您的记录已经通过字典键匹配,则可能根本不需要使用集合。一个简单的循环应该做。

而不是unique_documents.difference(all_documents)使用all_documents.difference(unique_documents)

有关Python Sets的更多信息

最新更新