I want to build a query for sunburnt (solr interface) using class inheritance and therefore adding key-value pairs together. The sunburnt interface takes keyword arguments. How can I transform a dict ({'type':'Event'}
) into keyword arguments (type='Event'
)?
Asked
Active
Viewed 2.4e+01k times
458

wjandrea
- 28,235
- 9
- 60
- 81

teaforthecat
- 4,813
- 2
- 16
- 8
3 Answers
816
Use the double-star (aka double-splat?) operator:
func(**{'type':'Event'})
is equivalent to
func(type='Event')
-
113and if you already have a dict object called "myDict" you just `func(**myDict)` .i.e `myDict = {"type": "event"}` – James Khoury Apr 19 '11 at 00:57
-
3This is pretty well-covered in the python standard documentation. See also: http://stackoverflow.com/questions/1137161. (dmid://juice_cobra_hush) – dreftymac Feb 29 '16 at 23:17
-
1This is brilliantly helpful, especially when using converting dictionaries into Swagger model instances. Thanks. – timmins Feb 21 '19 at 22:59
45
**
operator would be helpful here.
**
operator will unpack the dict elements and thus **{'type':'Event'}
would be treated as type='Event'
func(**{'type':'Event'})
is same as func(type='Event')
i.e the dict elements would be converted to the keyword arguments
.
FYI
*
will unpack the list elements and they would be treated as positional arguments
.
func(*['one', 'two'])
is same as func('one', 'two')

Vishvajit Pathak
- 3,351
- 1
- 21
- 16
17
Here is a complete example showing how to use the **
operator to pass values from a dictionary as keyword arguments.
>>> def f(x=2):
... print(x)
...
>>> new_x = {'x': 4}
>>> f() # default value x=2
2
>>> f(x=3) # explicit value x=3
3
>>> f(**new_x) # dictionary value x=4
4

Ben Mares
- 1,764
- 1
- 15
- 26