[英]Replace keys of a nested dictionary with the value of another dictionary(where keys of two dict are equal)), value for a key may be list of dicts
[英]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.