สำหรับ tuple ให้t = ((1, 'a'),(2, 'b'))
dict(t)
ส่งคืน{1: 'a', 2: 'b'}
มีวิธีที่ดีที่จะได้รับ{'a': 1, 'b': 2}
(ปุ่มและ vals แลกเปลี่ยน)?
ในท้ายที่สุดฉันต้องการที่จะ1
ได้รับคืน'a'
หรือ2
ได้รับ'b'
การแปลงเป็นคำพูดไม่ใช่วิธีที่ดีที่สุด
สำหรับ tuple ให้t = ((1, 'a'),(2, 'b'))
dict(t)
ส่งคืน{1: 'a', 2: 'b'}
มีวิธีที่ดีที่จะได้รับ{'a': 1, 'b': 2}
(ปุ่มและ vals แลกเปลี่ยน)?
ในท้ายที่สุดฉันต้องการที่จะ1
ได้รับคืน'a'
หรือ2
ได้รับ'b'
การแปลงเป็นคำพูดไม่ใช่วิธีที่ดีที่สุด
คำตอบ:
ลอง:
>>> t = ((1, 'a'),(2, 'b'))
>>> dict((y, x) for x, y in t)
{'a': 1, 'b': 2}
dict((x, y) for x, y, z in t)
หรือdict((x, (y, z)) for x, y, z in t)
เพื่อให้ได้ค่าที่สองและสามเป็น tuple
วิธีที่ง่ายกว่าเล็กน้อย:
>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}
reverse
สะกดคำออกมาอย่างชัดเจน
map
จะเร็วกว่าความเข้าใจเมื่อสิ่งที่ถูกแมปเป็นฟังก์ชั่นในตัว (เช่นreversed
); ในกรณีอื่น ๆ ส่วนใหญ่ตรงกันข้ามเป็นจริง แต่มันจะดีกว่าไปที่โปรไฟล์กว่าเดา :)
รัดกุมยิ่งขึ้นถ้าคุณใช้ python 2.7:
>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}
หรือ:
>>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ]
[{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}]
หากมีหลายค่าสำหรับคีย์เดียวกันรหัสต่อไปนี้จะผนวกค่าเหล่านั้นเข้ากับรายการที่สอดคล้องกับคีย์
d = dict()
for x,y in t:
if(d.has_key(y)):
d[y].append(x)
else:
d[y] = [x]
นี่คือวิธีการทำสองวิธี:
>>> t = ((1, 'a'), (2, 'b'))
>>> # using reversed function
>>> dict(reversed(i) for i in t)
{'a': 1, 'b': 2}
>>> # using slice operator
>>> dict(i[::-1] for i in t)
{'a': 1, 'b': 2}
dict(zip(*zip(*t)[::-1]))
ผมต้องลองกับซิป สิ่งนี้ช้ากว่าขี้เหร่และใช้หนทางมากขึ้น