Перетворення диктату Python в kwargs?


323

Я хочу створити запит на загоряння (інтерфейс solr), використовуючи успадкування класів і тому разом додаючи пари ключових значень. Інтерфейс загоряння приймає аргументи ключових слів. Як я можу перетворити дікт ({'type':'Event'})у аргументи ключових слів (type='Event')?

Відповіді:


562

Використовуйте оператор подвійної зірки (він же " double-splat?" ):

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

еквівалентно

func(type='Event')

82
і якщо у вас вже є об'єкт dict під назвою "myDict", ви просто func(**myDict) .iemyDict = {"type": "event"}
Джеймс Хоурі,

3
Це досить добре висвітлено у стандартній документації на python. Дивіться також: stackoverflow.com/questions/1137161 . (dmid: // juice_cobra_hush)
dreftymac

1
Це надзвичайно корисно, особливо при використанні перетворення словників у екземпляри моделі Swagger. Дякую.
timmins

13

** Тут буде корисний оператор.

**оператор розпакує елементи dict і, таким чином **{'type':'Event'}, буде розглядатися якtype='Event'

func(**{'type':'Event'})те саме, що func(type='Event')тобто елементи dict будуть перетворені на keyword arguments.

FYI

*розпакує елементи списку, і вони будуть розглядатися як positional arguments.

func(*['one', 'two']) те саме, що func('one', 'two')


4

Ось повний приклад, який показує, як використовувати **оператор для передачі значень зі словника як аргументів ключових слів.

>>> 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.