Chuyển đổi dict Python sang kwargs?


323

Tôi muốn xây dựng một truy vấn cho sunburnt (giao diện solr) bằng cách sử dụng kế thừa lớp và do đó thêm các cặp khóa - giá trị lại với nhau. Giao diện sunburnt lấy các đối số từ khóa. Làm thế nào tôi có thể chuyển đổi một dict ({'type':'Event'})thành đối số từ khóa (type='Event')?

Câu trả lời:


563

Sử dụng toán tử sao đôi (hay còn gọi là double-splat? ):

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

tương đương với

func(type='Event')

82
và nếu bạn đã có một đối tượng dict gọi là "myDict", bạn chỉ cần func(**myDict) .iemyDict = {"type": "event"}
James Khoury

3
Điều này được bao phủ khá tốt trong tài liệu tiêu chuẩn python. Xem thêm: stackoverflow.com/questions/1137161 . (dmid: // Juice_cobra_hush)
dreftymac

1
Điều này rất hữu ích, đặc biệt là khi sử dụng chuyển đổi từ điển thành các trường hợp mô hình Swagger. Cảm ơn.
mốc thời gian

13

** điều hành sẽ hữu ích ở đây.

**toán tử sẽ giải nén các phần tử dict và do đó **{'type':'Event'}sẽ được coi làtype='Event'

func(**{'type':'Event'})giống như func(type='Event')các phần tử dict sẽ được chuyển đổi thành keyword arguments.

FYI

*sẽ giải nén các thành phần danh sách và chúng sẽ được coi là positional arguments.

func(*['one', 'two']) giống như func('one', 'two')


4

Dưới đây là một ví dụ hoàn chỉnh cho thấy cách sử dụng **toán tử để truyền các giá trị từ từ điển làm đối số từ khóa.

>>> 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.