发现列表和集合之间的区别

时间:2019-07-01 15:35:23

标签: python list set

我正在尝试查找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变量在记录中包含两个新条目。我想知道他们是谁。

谢谢

3 个答案:

答案 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)

More on Python Sets