Python-Diktat in kwargs konvertieren?

322

Ich möchte eine Abfrage für sunburnt (solr-Schnittstelle) unter Verwendung der Klassenvererbung erstellen und daher Schlüssel-Wert-Paare zusammenfügen. Die sunburnt-Schnittstelle akzeptiert Schlüsselwortargumente. Wie kann ich ein Diktat ({'type':'Event'})in Schlüsselwortargumente umwandeln (type='Event')?

Tee für die Katze
quelle

Antworten:

561

Verwenden Sie den Doppelstern- Operator (auch bekannt als Double-Splat? ):

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

ist äquivalent zu

func(type='Event')
unutbu
quelle
81
und wenn Sie bereits ein Diktatobjekt namens "myDict" haben, haben Sie gerade func(**myDict) .iemyDict = {"type": "event"}
James Khoury
3
Dies wird in der Python-Standarddokumentation ziemlich gut behandelt. Siehe auch: stackoverflow.com/questions/1137161 . (dmid: // Juice_cobra_hush)
Dreftymac
1
Dies ist besonders hilfreich, wenn Sie Wörterbücher in Swagger-Modellinstanzen konvertieren. Vielen Dank.
Timmins
13

** Betreiber wäre hier hilfreich.

**Der Bediener entpackt die diktierten Elemente und wird daher **{'type':'Event'}als behandelttype='Event'

func(**{'type':'Event'})ist dasselbe wie func(type='Event')dh die dikt-Elemente würden in die konvertiert keyword arguments.

Zu Ihrer Information

*entpackt die Listenelemente und sie werden als behandelt positional arguments.

func(*['one', 'two']) ist das gleiche wie func('one', 'two')

Vishvajit Pathak
quelle
4

Hier ist ein vollständiges Beispiel, das zeigt, wie der **Operator verwendet wird, um Werte aus einem Wörterbuch als Schlüsselwortargumente zu übergeben.

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