Một lớp lót: tạo từ điển từ danh sách với các chỉ mục là khóa


91

Tôi muốn tạo một từ điển từ một danh sách nhất định, chỉ trong một dòng . Các khóa của từ điển sẽ là các chỉ mục và các giá trị sẽ là các phần tử của danh sách. Một cái gì đó như thế này:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

Đầu ra:

{0:51, 1:27, 2:13, 3:56}

Tôi không có bất kỳ yêu cầu cụ thể nào về lý do tại sao tôi muốn một dòng. Tôi chỉ đang khám phá python và tự hỏi liệu điều đó có khả thi không.


3
Bạn nghĩ bạn sẽ đạt được lợi thế gì khi có cuốn từ điển này? Việc tra cứu chỉ mục sẽ không nhanh hơn với từ điển.
Martijn Pieters

@MartijnPieters: Vâng, tôi có thể cần, ví dụ này: {[x[0]:51, x[1]:27, x[2]:13, x[3]:56}.
Nawaz

3
sau đó chỉ cần sử dụng zip(): dict(zip(x, a)).
Martijn Pieters

Câu trả lời:


158
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

sẽ sản xuất

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

Trả về một đối tượng liệt kê. trình tự phải là một trình tự, một trình lặp hoặc một số đối tượng khác hỗ trợ lặp lại. Các next()phương pháp của iterator được trả về bởi enumerate()lợi nhuận một tuplecó chứa một số lượng (từ bắt đầu mặc định là 0) và các giá trị thu được từ iterating trên chuỗi :


2
@jamylak Nhưng không cần xóa của bạn. Mọi người có thể đã học được về count()...
glglgl

@glglgl Nên có một cách để làm điều đó;)
jamylak

đánh bại tôi 2 phút :)
jcr

48

Với một hàm tạo khác, bạn có

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

7
@StefanoSanfilippo Dict và phần hiểu được bộ đã được hỗ trợ cho Python 2.7.
kevingessner

Tôi đứng sửa lại. Tuy nhiên, hãy nhớ rằng điều này không áp dụng cho các phiên bản Python 2 trước đó.
Stefano Sanfilippo

14

Hãy thử enumerate: nó sẽ trả về một danh sách (hoặc trình lặp) gồm các bộ giá trị (i, a[i]), từ đó bạn có thể tạo dict:

a = [51,27,13,56]  
b = dict(enumerate(a))
print b


3

Đơn giản chỉ cần sử dụng khả năng hiểu danh sách.

a = [51,27,13,56]  
b = dict( [ (i,a[i]) for i in range(len(a)) ] )
print b
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.