簡體   English   中英

找出列表和集合之間的差異

[英]Find difference between list and 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])]

基本上,我試圖在兩個變量之間比較 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為您提供了不存在於所述第二組的第一組中的元素。

如果您想查看添加刪除的內容,您可以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 集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM