jobrant
jobrant

Reputation: 25

Comparing/combining two dictionaries

I have two dictionaries with key-value pairs as follows:

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

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

Not all keys are present in the both dictionaries and each dictionary contains approximately 200,000 key-value pairs. What I want to do is compare or combine these two and produce an output text file such that if the key is in both dictionaries, I get both values, with an output file format like:

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

How can I do this?

Upvotes: 2

Views: 4111

Answers (1)

Abhijit
Abhijit

Reputation: 63777

Note If you are using a dictionary (Unless OrderedDict), the order would not be preserved, so the final order of your result would not be same as you depicted in your example

Coming back to your example If

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

You can try this

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

If you want to preserve the Order, you need to create the original dictionary as an ordered dict in the first instance

Then you can do as

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

Upvotes: 4

Related Questions