2011-09-30 106 views
7

我有一個包含超過90,000個條目的龐大python字典。由於我不會涉及的原因,我需要將該字典存儲在我的數據庫中,然後在稍後重新編譯數據庫條目中的字典。檢查兩個龐大的Python字典是否相等

我試圖設置一個程序來驗證我的存儲和重新編譯是否忠實,並且我的新字典與舊字典相同。什麼是測試這個最好的方法。

有一些細微的差異,我想弄清楚它們是什麼。

+1

如果你的價值觀都具有等價定義,只是dict1 == dict2應該工作 – Thomas

+0

'新== old' ... –

+0

我假設可能有一些小問題,如果有小問題,我想知道它們是什麼,即有什麼區別。 – Spencer

回答

10

最明顯的方法當然是:

if oldDict != newDict: 
    print "**Failure to rebuild, new dictionary is different from the old" 

這應該是最快的,因爲它依賴於Python的內部做比較。

UPDATE:看起來你不是在「等於」之後,而是在弱一些。我認爲你需要編輯你的問題來說明你認爲「等價」的含義。

+0

我已經嘗試過這一點,並且存在差異。我想建立一個程序,讓我知道這些差異是什麼。 – Spencer

+8

@Peter如果你想「設置一個程序,讓我知道這些差異是什麼」,我認爲你的問題很清楚,爲什麼你要將這個答案標記爲接受? – agf

+0

以及如果你有嵌套的對象,而不是基元 – dtc

1
>>> 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。這是一個非常完整的解決方案。

+0

其他帖子不使用'iteritems'。我更喜歡這種方法。 – sholsapp

2

你可以像這樣的東西開始,並調整它來滿足您的需求

>>> 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())