我正在尝试找到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的更多信息