Reputation: 28090
I have 2 dictionaries;
Dict1={'John': ('AA', 'BB'), 'Tom': ('XX', 'YY'), 'Jane': ('AA', 'BB')}
Dict2={'John': ('CC', 'DD', '2'), 'Tom': ('CC', 'DD', '1'), 'Jack': ('CC', 'DD', '3')}
Based on these 2 lists, I want to generate a dictionary that looks like this;
OutputDict={'John': ('AA', 'BB', '2'), 'Tom': ('XX', 'YY', '1')}
How it works is this;
How can this be done in Python? I am using Python2.7.
Upvotes: 0
Views: 213
Reputation: 627
A straight-forward solution would look like this, similar to the other answers:
outputDict = {}
for k, v in dict1.items():
if k in dict2:
result[k] = v + (dict2[k][2],)
Since this problem is fairly simple, an (arguably) more Pythonic way could make use of dict comprehension instead without compromising readability:
outputDict = {k: v + (dict2[k][2],) for k, v in dict1.items() if k in dict2}
I would also suggest using lower_case or camelCase naming for variables, as per the PEP 8 Style Guide, reserving UpperCase for things like class names.
Upvotes: 2
Reputation: 5275
>>> Dict1={'John': ('AA', 'BB'), 'Tom': ('XX', 'YY'), 'Jane': ('AA', 'BB')}
>>> Dict2={'John': ('CC', 'DD', '2'), 'Tom': ('CC', 'DD', '1'), 'Jack': ('CC', 'DD', '3')}
>>> OutputDict = {}
>>> for k in Dict1:
... if k in Dict2.keys():
... OutputDict[k] = tuple(Dict1[k]) + tuple(Dict2[k][2])
...
>>> OutputDict
{'John': ('AA', 'BB', '2'), 'Tom': ('XX', 'YY', '1')}
Upvotes: 3
Reputation: 6814
There are multiple ways to do what you are trying to do, the easiest one would be the following:
OutputDict = {}
for key in Dict1.iterkeys():
if key in Dict2:
OutputDict[key] = Dict1[key] + Dict2[key][2]
Since all the operations are O(1), and we run it for each key on Dict1 (or Dict2 depending) all this runs in O(min(n,m)) where n is the length of Dict1 and m the length of Dict2
Upvotes: 2