I am intrigued by the following python expression:
d3 = dict(d1, **d2)
The task is to merge 2 dictionaries into a third one, and the above expression accomplishes the task just fine. I am interested in the ** operator and what exactly is it doing to the expression. I thought that ** was the power operator and haven't seen it used in the context above yet.
The full snippet of code is this:
>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
you have got your answer of the ** operator. here's another way to add dictionaries
**
in argument lists has a special meaning, as covered in section 4.7 of the tutorial. The dictionary (or dictionary-like) object passed with**kwargs
is expanded into keyword arguments to the callable, much like*args
is expanded into separate positional arguments.In Python, any function can accept multiple arguments with *;
or multiple keyword arguments with **.
Receiving-side example:
Calling-side example (thanks Thomas):
It's also worth mentioning the mechanics of the dict constructor. It takes an initial dictionary as its first argument and can also take keyword arguments, each representing a new member to add to the newly created dictionary.
That operator is used to unpack argument list: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists
The ** turns the dictionary into keyword parameters:
Becomes: