รายการ tuples ในพจนานุกรม


112

นี่คือวิธีที่ฉันกำลังแปลงรายการ tuples เป็นพจนานุกรมใน Python:

l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

มีวิธีที่ดีกว่า? ดูเหมือนว่าควรมีซับเดียวสำหรับทำสิ่งนี้

คำตอบ:


179

เพียงแค่โทรdict()ไปที่รายการสิ่งที่ดึงดูดโดยตรง

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

1
Derp ฉันรู้ว่าจะมีวิธีง่ายๆในการทำ ... มาจาก Ruby ที่นี่พยายามเรียนรู้วิธีการทำสิ่งต่างๆของ Python ขอบคุณ!
Sarah Vessels

5
@chandresh นี้ไม่ทำงานในหลาม 3 จึงไม่จำเป็นต้องมีการปรับปรุง
Sven Marnach

@SvenMarnach นี่คือผลลัพธ์ของคำสั่งเดียวกับที่คุณเขียนไว้ด้านบนบน py 3.5 terminal Traceback (โทรล่าสุดล่าสุด): ไฟล์ "<ipython-input-313-7bb3559567ff>" บรรทัด 1 ใน <module> dict (my_list) TypeError: อ็อบเจ็กต์ 'Dictionary' ไม่สามารถเรียกได้
CKM

4
@chandresh สิ่งนี้ไม่เกี่ยวข้องกับ Python 3 - เป็นเพราะคุณมีตัวแปรที่เรียกว่าdictทำให้เป็นเงา Python ในตัวที่มีชื่อเดียวกัน คุณไม่ควรทำอย่างนั้น
Sven Marnach

@SvenMarnach โอ้. ขอบคุณ. มันได้ผล อันที่จริงฉันได้รับโค้ดบางส่วนจากเว็บและพยายามเรียกใช้สิ่งนี้ ดูเหมือนว่าผู้เขียนใช้dictเป็นชื่อตัวแปรจากที่ฉันได้รับข้อผิดพลาด ขอบคุณอีกครั้ง.
CKM

23

คอนdictสตรัคเตอร์ยอมรับอินพุตตรงตามที่คุณมี (คีย์ / ค่าทูเปิล)

>>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

จากเอกสารประกอบ :

ตัวอย่างเช่นสิ่งเหล่านี้ส่งคืนพจนานุกรมเท่ากับ {"one": 1, "two": 2}:

dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

15

ด้วยdictความเข้าใจ:

h = {k:v for k,v in l}

4
ดีเพราะช่วยให้คุณสามารถจัดรูปแบบคีย์ / ค่าก่อนที่จะเพิ่มลงใน dict
jfunk

7

ดูเหมือนว่าทุกคนในที่นี้ถือว่ารายการทูเปิลมีการแมประหว่างคีย์และค่าแบบหนึ่งต่อหนึ่ง (เช่นไม่มีคีย์ซ้ำสำหรับพจนานุกรม) เนื่องจากนี่เป็นคำถามแรกที่ค้นหาในหัวข้อนี้ฉันจึงโพสต์คำตอบสำหรับกรณีทั่วไปที่เราต้องจัดการกับรายการที่ซ้ำกัน:

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.