แปลง Python เป็น dict เป็น kwargs หรือไม่


323

ฉันต้องการสร้างแบบสอบถามสำหรับ sunburnt (อินเตอร์เฟส solr) โดยใช้การสืบทอดคลาสดังนั้นจึงเพิ่มคู่คีย์ - ค่าเข้าด้วยกัน ส่วนต่อประสาน Sunburnt รับอาร์กิวเมนต์คำหลัก ฉันจะแปลง dict ({'type':'Event'})เป็นอาร์กิวเมนต์คำหลักได้(type='Event')อย่างไร

คำตอบ:


563

ใช้ตัวดำเนินการdouble-star (aka double-splat? ):

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

เทียบเท่ากับ

func(type='Event')

82
และถ้าคุณมีวัตถุ dict ที่เรียกว่า "myDict" คุณก็แค่func(**myDict) . imyDict = {"type": "event"}
James Khoury

3
นี่ค่อนข้างครอบคลุมในเอกสารมาตรฐานของไพ ธ อน ดูเพิ่มเติม: 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.