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