b = dict(zip(a[::2], a[1::2]))
Nếu a
lớn, có lẽ bạn sẽ muốn làm một cái gì đó như sau, mà không tạo ra bất kỳ danh sách tạm thời như ở trên.
from itertools import izip
i = iter(a)
b = dict(izip(i, i))
Trong Python 3, bạn cũng có thể sử dụng một cách hiểu chính tả, nhưng trớ trêu thay tôi nghĩ rằng cách đơn giản nhất để làm điều đó sẽ là range()
và len()
thường là mùi mã.
b = {a[i]: a[i+1] for i in range(0, len(a), 2)}
Vì vậy, iter()/izip()
phương thức này có lẽ vẫn là Pythonic nhất trong Python 3, mặc dù như EOL ghi chú trong một nhận xét, zip()
đã lười biếng trong Python 3 nên bạn không cần izip()
.
i = iter(a)
b = dict(zip(i, i))
Nếu bạn muốn nó trên một dòng, bạn sẽ phải gian lận và sử dụng dấu chấm phẩy. ;-)