นี่คือวิธีที่ฉันกำลังแปลงรายการ tuples เป็นพจนานุกรมใน Python:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
มีวิธีที่ดีกว่า? ดูเหมือนว่าควรมีซับเดียวสำหรับทำสิ่งนี้
นี่คือวิธีที่ฉันกำลังแปลงรายการ tuples เป็นพจนานุกรมใน Python:
l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}
มีวิธีที่ดีกว่า? ดูเหมือนว่าควรมีซับเดียวสำหรับทำสิ่งนี้
คำตอบ:
เพียงแค่โทรdict()
ไปที่รายการสิ่งที่ดึงดูดโดยตรง
>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
dict
ทำให้เป็นเงา Python ในตัวที่มีชื่อเดียวกัน คุณไม่ควรทำอย่างนั้น
dict
เป็นชื่อตัวแปรจากที่ฉันได้รับข้อผิดพลาด ขอบคุณอีกครั้ง.
คอน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]])
ด้วยdict
ความเข้าใจ:
h = {k:v for k,v in l}
ดูเหมือนว่าทุกคนในที่นี้ถือว่ารายการทูเปิลมีการแมประหว่างคีย์และค่าแบบหนึ่งต่อหนึ่ง (เช่นไม่มีคีย์ซ้ำสำหรับพจนานุกรม) เนื่องจากนี่เป็นคำถามแรกที่ค้นหาในหัวข้อนี้ฉันจึงโพสต์คำตอบสำหรับกรณีทั่วไปที่เราต้องจัดการกับรายการที่ซ้ำกัน:
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]}