Câu trả lời:
Thử:
>>> 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)
hoặc dict((x, (y, z)) for x, y, z in t)
để có được các giá trị thứ hai và thứ ba dưới dạng một tuple.
Một phương pháp đơn giản hơn một chút:
>>> t = ((1, 'a'),(2, 'b'))
>>> dict(map(reversed, t))
{'a': 1, 'b': 2}
reverse
đánh vần rõ ràng.
map
nhanh hơn mức hiểu khi điều được ánh xạ là một hàm dựng sẵn khác (như reversed
); trong hầu hết các trường hợp khác, điều ngược lại là đúng. Nhưng nó tốt hơn để hồ sơ hơn là đoán :)
Thậm chí ngắn gọn hơn nếu bạn đang ở trên python 2.7:
>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
>>> dict([('hi','goodbye')])
{'hi': 'goodbye'}
Hoặc là:
>>> [ 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ưới đây là một số cách để làm điều đó:
>>> 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]))
. Điều này chậm hơn, xấu hơn và sử dụng nhiều bộ nhớ hơn .. có thể là 3x.