簡體   English   中英

如何檢查字典是否在字典的鍵和值列表中,字典可以嵌套在字典的列表中?

[英]How to check if dictionary is within a list of dictionaries on both key and value of dict, where dicts can be nested?

我想檢查整個字典(鍵和值)是否存在於字典列表中。 每個字典可以是字典和列表的嵌套字典。

當我有很多標量要檢查每個標量是否存在於標量的目標列表中時,通常將目標列表放入集合中並檢查該集中的存在,例如scalar in set(list_of_scalars) (請告訴我這是否不是執行此操作的最佳方法)

對於dict,我無法my_dict in set(list_of_dicts)執行my_dict in set(list_of_dicts)因為這引發了unhashable type: 'dict'

如果存在相同的鍵名但值不同(這是我想要的), my_dict in list_of_dicts執行my_dict in list_of_dicts似乎會正確返回False ,但是我擔心運行時; python內部優化嗎? 我還能做什么?

編輯:假設我將執行許多查找,並使用Python3.7

為了檢查標量列表中是否存在標量,通常將列表放入集合中並檢查集合中的存在,就像set(list_of_scalars)中的標量一樣。 (請告訴我這是否不是執行此操作的最佳方法)

集合的創建將是O(n)操作。 該集合中的每個后續查找將是O(1)平均情況,因此,如果您計划執行多次查找,則值得。 否則,如果僅執行一次查找,則最好在列表中執行線性搜索(假設其未排序)。

對於dict,我無法在set(list_of_dicts)中執行my_dict,因為這會引發不可散列的類型:“ dict”。 但是list_of_dicts中的my_dict運行正常,但是我擔心運行時。

如果您需要重復執行此查找,則根據這些詞典中存儲內容的性質,您可能需要重新考慮使用詞典,而是選擇對象。 然后,您可以為對象定義__hash__方法並將其存儲在一個集合中,查找會容易得多。

python內部優化嗎? 我還能做什么?

您可以在這里查看使用Python數據結構進行操作的時間復雜度: TimeComplexity Python無法優化通用列表中的通用搜索,它將使用線性搜索行為(O(n))。

要優化多個查找,可以創建可哈希字典類並在一組可哈希字典中進行搜索:

l = [{1:2,3:4}, {5:6,7:8}]
setofdicts = set(map(hashabledict, l))
hashabledict({5:6,7:8}) in setofdicts
#True

暫無
暫無

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

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