 <p>This works with arbitrary number of dicts:</p> <pre><code>def combine(**kwargs): return { k: { d: kwargs[d][k] for d in kwargs } for k in set.intersection(*map(set, kwargs.values())) } </code></pre> <p>For example:</p> <pre><code>print combine( one={'1': 3, '2': 4, '3':8, '9': 20}, two={'3': 40, '9': 28, '100': 3}, three={'3':14, '9':42}) # {'9': {'one': 20, 'three': 42, 'two': 28}, '3': {'one': 8, 'three': 14, 'two': 40}} </code></pre>