The result that I need should be a real dict, not just a ChainMap. (It
is because I have to mutate it.)

d1 = {'a':1, 'b':2}
d2 = {'c':3, 'd':4}
d3 = {'e':5, 'f':6}

#1. My first naive approach was:


from collections import ChainMap
d = {}
for key,value in ChainMap(d1, d2, d3).items():
    d[key] = value

#2. Much more effective version, but requires too many lines:

d= {}
d.update(d1)
d.update(d2)
d.update(d3)

#3. Third version is more compact. It uses a side effect inside a list
comp., so I don't like it either:

d = {}
[d.update(_) for _ in [d1, d2, d3]]


#4. Last version:

d = {}
d.update(ChainMap(d1, d2, d3))

Visually, it is the cleanest and the easiest to understand. However, it
uses ChainMap.__iter__ and that goes over all mappings in a loop written
in pure Python.

Is there a version that is as effective as #3, but as clean and nice as #4?


-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to