¿Convertir Python dict a kwargs?

323

Quiero construir una consulta para sunburnt (interfaz solr) usando herencia de clase y, por lo tanto, agregando pares clave-valor juntos. La interfaz quemada por el sol toma argumentos de palabras clave. ¿Cómo puedo transformar un dict ({'type':'Event'})en argumentos de palabras clave (type='Event')?

teaforthecat
fuente

Respuestas:

563

Utilice el operador de doble estrella (también conocido como doble splat? ):

func(**{'type':'Event'})

es equivalente a

func(type='Event')
unutbu
fuente
82
y si ya tiene un objeto dict llamado "myDict" que acaba func(**myDict) .esmyDict = {"type": "event"}
James Khoury
3
Esto está bastante bien cubierto en la documentación estándar de Python. Consulte también: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac
1
Esto es increíblemente útil, especialmente cuando se utilizan diccionarios de conversión en instancias de modelo Swagger. Gracias.
timmins
13

** El operador sería útil aquí.

**el operador desempaquetará los elementos dict y, por **{'type':'Event'}lo tanto , se tratará comotype='Event'

func(**{'type':'Event'})es igual que, func(type='Event')es decir, los elementos dict se convertirían a keyword arguments.

FYI

*descomprimirá los elementos de la lista y se tratarán como positional arguments.

func(*['one', 'two']) es igual que func('one', 'two')

Vishvajit Pathak
fuente
4

Aquí hay un ejemplo completo que muestra cómo usar el **operador para pasar valores de un diccionario como argumentos de palabras clave.

>>> 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
fuente