Convertir Python dict en kwargs?


323

Je veux construire une requête pour sunburnt (interface solr) en utilisant l'héritage de classe et donc en ajoutant des paires clé-valeur ensemble. L'interface coup de soleil prend des arguments de mots clés. Comment puis-je transformer un dict ({'type':'Event'})en arguments de mots clés (type='Event')?

Réponses:


563

Utilisez l' opérateur double étoile (aka double splat? ):

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

est équivalent à

func(type='Event')

82
et si vous avez déjà un objet dict appelé "myDict" vous venez de func(**myDict) .iemyDict = {"type": "event"}
James Khoury

3
Ceci est assez bien couvert dans la documentation standard de python. Voir aussi: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac

1
Cela est extrêmement utile, en particulier lors de l'utilisation de la conversion de dictionnaires en instances de modèle Swagger. Merci.
timmins

13

** l'opérateur serait utile ici.

**l'opérateur déballera les éléments dict et **{'type':'Event'}serait donc traité commetype='Event'

func(**{'type':'Event'})est identique à func(type='Event')c.- à- d. que les éléments dict seraient convertis en keyword arguments.

FYI

*décompactera les éléments de la liste et ils seront traités comme positional arguments.

func(*['one', 'two']) est identique à func('one', 'two')


4

Voici un exemple complet montrant comment utiliser l' **opérateur pour passer des valeurs d'un dictionnaire comme arguments de mot-clé.

>>> 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.