2

我有两个带有键值对的字典,如下所示:

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

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

并非所有的键都出现在两个字典中,每个字典包含大约 200,000 个键值对。我想要做的是比较或组合这两者并生成一个输出文本文件,如果键在两个字典中,我会得到两个值,输出文件格式如下:

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

我怎样才能做到这一点?

4

1 回答 1

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)

如果要保留订单,则需要首先将原始字典创建为有序字典

然后你可以这样做

>>> 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])])
>>> 
于 2012-04-30T17:42:07.903 回答