Преобразование Python dict в kwargs?


323

Я хочу построить запрос для Sunburnt (интерфейс Solr), используя наследование классов и, следовательно, добавив пары ключ-значение вместе. Загорелый интерфейс принимает ключевые аргументы. Как я могу превратить ({'type':'Event'})слова в аргументы ключевых слов (type='Event')?

Ответы:


563

Используйте оператор двойной звезды (он же двойной сплат? ):

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. Спасибо.
Тимминс

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.