2012-04-30 126 views
2

我有兩個字典與鍵 - 值對,如下所示:比較/合併兩個字典

dict-1 ch:23, 100 
     ch:24, 95 

dict-2 Ch:23, 98 
     ch:25, 100 

並非所有的鍵存在於兩個字典和每個字典包含大約200000鍵 - 值對。我想要做的是比較或結合這兩種併產生一個輸出的文本文件,例如,如果關鍵是在兩個字典,我得到兩個值,與像一個輸出文件格式:

ch:23 100 98   
ch:24 95 .  
Ch:25 .  100 

我該怎麼辦這個?

回答

4

注意如果您使用的是字典(除非OrderedDict),順序將不被保留,所以你在你的例子

描述回來到您的結果最終訂單不會是相同的例如 如果

>>> d1={'ch:23': 100, 'ch:24': 95} 
>>> d2={'ch:23': 98 ,'ch:25': 100} 

如果は你可以試試這個

>>> d3=collections.defaultdict(list) 
>>> for k,e in d1.items()+d2.items(): 
    d3[k].append(e) 

NT保留訂單,你需要創建原始字典作爲一個有序字典一審

然後你可以做

>>> d1 
OrderedDict([('ch:23', 100), ('ch:24', 95)]) 
>>> d2 
OrderedDict([('ch:23', 98), ('ch:25', 100)]) 
>>> d3=collections.OrderedDict() 
>>> for k,e in d1.items()+d2.items(): 
    d3.setdefault(k,[]).append(e) 
>>> d3 
OrderedDict([('ch:23', [100, 98]), ('ch:24', [95]), ('ch:25', [100])]) 
>>> 
+0

謝謝你的OrderedDict。我需要使用這個,安裝python 2.7.x後,它似乎解決了我的問題。但是,如果兩個字典之間的共享密鑰的值相同,則原始值會被覆蓋,因此在輸出中似乎只有一個值。 – jobrant

+0

我想我解碼這個問題,來自編碼器朋友的一些幫助。使得OrderedDict後: – jobrant

+0

朋友幫這一點:使OrderedDict後:merged_keys = d1_keys + d2_keys merged_keys =的uniq(merged_keys) 打印merged_keys 打印LEN(merged_keys) D3 = collections.OrderedDict() output_doc =打開(」 combo.txt」, 「W +」) 用於ch_pos在merged_keys: line_output = ch_pos 如果(d1.has_key(ch_pos)): line_output = line_output + 「\ t」 的+ D1 [ch_pos] 否則: line_output =如果(d2.has_key(ch_pos)): line_output = line_output +「\ t」+ d2 [ch_pos] else: line_output = line_output +「\ t」+「ND」 output_doc.write(line_output +「\ n」) – jobrant