Convertendo dict Python em kwargs?

323

Eu quero criar uma consulta para queimada pelo sol (interface solr) usando herança de classe e, portanto, adicionando pares de valores-chave. A interface queimada pelo sol recebe argumentos de palavras-chave. Como posso transformar um ditado ({'type':'Event'})em argumentos de palavra-chave (type='Event')?

teaforthecat
fonte

Respostas:

563

Use o operador de estrela dupla (também conhecido como splat duplo? ):

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

é equivalente a

func(type='Event')
unutbu
fonte
82
e se você já tem um objeto dict chamado "myDict" você só func(**myDict) .iemyDict = {"type": "event"}
James Khoury
3
Isso é bastante bem coberto na documentação padrão do python. Consulte também: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac
1
Isso é brilhantemente útil, especialmente ao usar a conversão de dicionários em instâncias do modelo Swagger. Obrigado.
timmins
13

** operador seria útil aqui.

**O operador descompactará os elementos dict e, portanto, **{'type':'Event'}seria tratado comotype='Event'

func(**{'type':'Event'})é o mesmo que, por exemplo, func(type='Event')os elementos dict seriam convertidos em keyword arguments.

Para sua informação

*irá descompactar os elementos da lista e eles serão tratados como positional arguments.

func(*['one', 'two']) é o mesmo que func('one', 'two')

Vishvajit Pathak
fonte
4

Aqui está um exemplo completo mostrando como usar o **operador para passar valores de um dicionário como argumentos de palavras-chave.

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