我正在尝试查找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])]
基本上,我试图在两个变量之间比较字典的字符串版本。
我有几种方法,其中包括unique_documents.difference(all_documents)
,但是它不返回空集。我知道一个事实,即all_documents变量在记录中包含两个新条目。我想知道他们是谁。
谢谢
答案 0 :(得分:1)
如果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 集中的元素,这些元素在 second 集中不存在。
如果您想查看添加了或的内容,可以symmetric_difference
。该函数被称为“对称”函数,因为无论参数顺序如何,它都能给出相同的结果。
>>> x.symmetric_difference(y)
{1, 2, 4, 5}
>>> y.symmetric_difference(x)
{1, 2, 4, 5}
答案 1 :(得分:0)
如果没有字典结构的描述就很难分辨,但是您的代码似乎只是在比较单个键。如果要比较两个词典的内容,则需要获取所有值:
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]
尽管这似乎不是很有效,但是如果没有有关数据结构的更多信息,很难提出更好的建议。如果您的记录已经可以通过字典键进行匹配,则可能根本不需要使用集合。一个简单的循环就可以了。
答案 2 :(得分:0)
使用unique_documents.difference(all_documents)
而不是all_documents.difference(unique_documents)