我有一個包含超過90,000個條目的龐大python字典。由於我不會涉及的原因,我需要將該字典存儲在我的數據庫中,然後在稍後重新編譯數據庫條目中的字典。檢查兩個龐大的Python字典是否相等
我試圖設置一個程序來驗證我的存儲和重新編譯是否忠實,並且我的新字典與舊字典相同。什麼是測試這個最好的方法。
有一些細微的差異,我想弄清楚它們是什麼。
我有一個包含超過90,000個條目的龐大python字典。由於我不會涉及的原因,我需要將該字典存儲在我的數據庫中,然後在稍後重新編譯數據庫條目中的字典。檢查兩個龐大的Python字典是否相等
我試圖設置一個程序來驗證我的存儲和重新編譯是否忠實,並且我的新字典與舊字典相同。什麼是測試這個最好的方法。
有一些細微的差異,我想弄清楚它們是什麼。
最明顯的方法當然是:
if oldDict != newDict:
print "**Failure to rebuild, new dictionary is different from the old"
這應該是最快的,因爲它依賴於Python的內部做比較。
UPDATE:看起來你不是在「等於」之後,而是在弱一些。我認爲你需要編輯你的問題來說明你認爲「等價」的含義。
>>> d1 = {'a':1,'b':2,'c':3}
>>> d2 = {'b':2,'x':2,'a':5}
>>> set(d1.iteritems()) - set(d2.iteritems()) # items in d1 not in d2
set([('a', 1), ('c', 3)])
>>> set(d2.iteritems()) - set(d1.iteritems()) # items in d2 not in d1
set([('x', 2), ('a', 5)])
編輯 不要投票給這個答案。去Fast comparison between two Python dictionary並添加upvote。這是一個非常完整的解決方案。
其他帖子不使用'iteritems'。我更喜歡這種方法。 – sholsapp
你可以像這樣的東西開始,並調整它來滿足您的需求
>>> bigd = dict([(x, random.randint(0, 1024)) for x in xrange(90000)])
>>> bigd2 = dict([(x, random.randint(0, 1024)) for x in xrange(90000)])
>>> dif = set(bigd.items()) - set(bigd2.items())
如果你的價值觀都具有等價定義,只是dict1 == dict2應該工作 – Thomas
'新== old' ... –
我假設可能有一些小問題,如果有小問題,我想知道它們是什麼,即有什麼區別。 – Spencer