2012-04-30 113 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