Convertire Picton dict in kwargs?


323

Voglio creare una query per sunburnt (interfaccia solr) usando l'ereditarietà delle classi e quindi sommando coppie chiave-valore. L'interfaccia bruciata dal sole accetta argomenti di parole chiave. Come posso trasformare un dict ({'type':'Event'})in argomenti di parole chiave (type='Event')?

Risposte:


563

Utilizzare l' operatore double-star (aka double-splat? ):

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

è equivalente a

func(type='Event')

82
e se hai già un oggetto dict chiamato "myDict" devi solo func(**myDict) .iemyDict = {"type": "event"}
James Khoury,

3
Questo è abbastanza ben coperto nella documentazione standard di Python. Vedi anche: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac,

1
Ciò è estremamente utile, specialmente quando si usano i dizionari di conversione in istanze del modello Swagger. Grazie.
Timmins

13

** l'operatore sarebbe utile qui.

**l'operatore disimballerà gli elementi dict e quindi **{'type':'Event'}verrebbe trattato cometype='Event'

func(**{'type':'Event'})è lo stesso che func(type='Event')gli elementi dict verrebbero convertiti in keyword arguments.

FYI

*decomprimerà gli elementi dell'elenco e verrebbero trattati come positional arguments.

func(*['one', 'two']) è lo stesso di func('one', 'two')


4

Ecco un esempio completo che mostra come utilizzare l' **operatore per passare valori da un dizionario come argomenti di parole chiave.

>>> 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.