len(dict1 + dict2) does not equal len(dict1) + len(dict2) so using the + operator is nonsense.<p>The operators should be |, &, and -, exactly as for sets, and the behaviour defined with just three rules:<p>1. The keys of dict1 [op] dict2 are the elements of dict1.keys() [op] dict2.keys().<p>2. The values of dict2 overwrite the values of dict1.<p>3. When either operand is a set, it is treated as a dict whose values are None.<p>This yields many useful operations and is simple to explain.<p>merge and update:<p><pre><code> {'a': 1, 'b': 2} | {'b': 3, 'c': 4} => {'a': 1, 'b': 3, 'c': 4}
</code></pre>
pick some items:<p><pre><code> {'a': 1, 'b': 2} & {'b': 3, 'c': 4} => {'b': 3}
</code></pre>
remove some items:<p><pre><code> {'a': 1, 'b': 2} - {'b': 3, 'c': 4} => {'a': 1}
</code></pre>
reset values of some keys:<p><pre><code> {'a': 1, 'b': 2} | {'b', 'c'} => {'a': 1, 'b': None, 'c': None}
</code></pre>
ensure all keys are present:<p><pre><code> {'b', 'c'} | {'a': 1, 'b': 2} => {'a': 1, 'b': 2, 'c': None}
</code></pre>
pick some items:<p><pre><code> {'b', 'c'} | {'a': 1, 'b': 2} => {'b': 2}
</code></pre>
remove some items:<p><pre><code> {'a': 1, 'b': 2} - {'b', 'c'} => {'a': 1}</code></pre>