Mengkonversi Python dict ke kwargs?

323

Saya ingin membangun kueri untuk sunburnt (antarmuka solr) menggunakan warisan kelas dan karenanya menambahkan pasangan nilai kunci secara bersamaan. Antarmuka sunburnt mengambil argumen kata kunci. Bagaimana saya bisa mengubah dict ({'type':'Event'})menjadi argumen kata kunci (type='Event')?

minum teh
sumber

Jawaban:

563

Gunakan operator bintang ganda (alias double-splat? ):

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

setara dengan

func(type='Event')
unutbu
sumber
82
dan jika Anda sudah memiliki objek dict yang disebut "myDict" Anda hanya func(**myDict) .iemyDict = {"type": "event"}
James Khoury
3
Ini cukup tercakup dalam dokumentasi standar python. Lihat juga: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac
1
Ini sangat membantu, terutama ketika menggunakan kamus konversi ke instance model Swagger. Terima kasih.
timmins
13

** Operator akan sangat membantu di sini.

**operator akan membongkar elemen dict dan dengan demikian **{'type':'Event'}akan diperlakukan sebagaitype='Event'

func(**{'type':'Event'})sama dengan func(type='Event')mis. elemen dikt akan dikonversi ke keyword arguments.

FYI

*akan membongkar elemen daftar dan mereka akan diperlakukan sebagai positional arguments.

func(*['one', 'two']) sama dengan func('one', 'two')

Vishvajit Pathak
sumber
4

Berikut ini adalah contoh lengkap yang menunjukkan cara menggunakan **operator untuk memberikan nilai dari kamus sebagai argumen kata kunci.

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