Particularly, the answer by StackOverflow user `Aaron Hall` upvoted around 680 times [1], also deconstructs and provides eerily similar content as what this post gives (for example, the poorness of the
dict(x, **y)
solution and some performance comparisons).I guess this post does mention itertools.chain and ChainMap ... though I would almost never recommend using those if your goal is to merge two regular dicts. Probably anyone reading the code is going to be baffled unless there was a special reason why generators or ChainMap were needed -- these really don't belong in the discussion; they're very different.
As someone who has used Python almost daily for the past 8 years, I also can't help but feel let down when I read more stuff about being so-called "pythonic." I especially hate it when I see discouraging criticisms on Stack Overflow that seem to scare away newcomers because they didn't know you could do a dict comprehension or something. The whole "pythonic" thing is waaayyyy overrated. Just write code that is clean, and if you use a couple of extra lines, or you loop over a range instead of a for-statement treating something as an Iterator, so what, it really, really doesn't matter in most cases, and you can always profile and fix the few cases where it does. It certainly doesn't matter because of some subjective debates about what is more "readable", like whether a dict-comprehension is "less readable" than a two-line copy-and-update approach.