Konwertowanie słownika Python na kwargs?


323

Chcę zbudować zapytanie dla sunburnt (interfejs solr) przy użyciu dziedziczenia klas, a zatem dodając pary klucz-wartość razem. Opalony interfejs przyjmuje argumenty słów kluczowych. Jak mogę przekształcić słownik ({'type':'Event'})w argumenty słów kluczowych (type='Event')?

Odpowiedzi:


562

Użyj operatora podwójnej gwiazdy (aka podwójna ikona? ):

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

jest równa

func(type='Event')

82
a jeśli masz już obiekt dict o nazwie „myDict”, po prostu func(**myDict) .iemyDict = {"type": "event"}
James Khoury

3
Jest to dość dobrze opisane w standardowej dokumentacji Pythona. Zobacz także: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac

1
Jest to niezwykle pomocne, szczególnie podczas konwersji słowników w instancje modelu Swagger. Dzięki.
timmins

13

** operator byłby tutaj pomocny.

**operator rozpakuje elementy dict i dlatego **{'type':'Event'}będzie traktowany jakotype='Event'

func(**{'type':'Event'})jest taki sam jak func(type='Event')np. elementy dict zostaną przekonwertowane na keyword arguments.

Do Twojej wiadomości

*rozpakuje elementy listy i będą traktowane jak positional arguments.

func(*['one', 'two']) jest taki sam jak func('one', 'two')


4

Oto kompletny przykład pokazujący, jak używać **operatora do przekazywania wartości ze słownika jako argumentów słów kluczowych.

>>> 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.