2013-05-17 45 views
61

Tôi muốn tạo một từ điển trong danh sách đã cho, chỉ trong một dòng. Các phím 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:Một lớp lót: tạo từ điển từ danh sách có chỉ mục là các phím

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

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

print(d) 

Output:

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

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

+1

Lợi ích nào bạn nghĩ bạn sẽ đạt được khi có từ điển này? Việc tra cứu chỉ mục sẽ không nhanh hơn với từ điển. –

+0

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

+2

sau đó chỉ sử dụng 'zip()': 'dict (zip (x, a))'. –

Trả lời

113
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)

Return một đối tượng enumerate. Trình tự phải là một trình tự, một trình biến đổi hoặc một số đối tượng khác hỗ trợ lặp lại. Phương pháp next() của iterator được trả về bởi enumerate() trả về một tuple có 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:

+0

+1 Tôi quên điều đơn giản nhất – jamylak

+2

@jamylak Nhưng không cần phải loại bỏ của bạn. Mọi người có thể đã học về 'count()' ... – glglgl

+0

+1. Câu trả lời chính xác. – Nawaz

14

Hãy thử enumerate: nó sẽ trả về một danh sách (hoặc iterator) của các bộ (i, a[i]), từ đó bạn có thể xây dựng một dict:

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

Với constructor khác, bạn có

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

Lưu ý rằng cú pháp này sẽ không hoạt động trong Python 2 –

+6

@StefanoSanfilippo Dict và thiết lập hiểu được được chuyển thành Python 2.7. – kevingessner

+0

Tôi đã sửa. 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 đó. –

4
{x:a[x] for x in range(len(a))} 
1

Chỉ cần sử dụng danh sách hiểu.

a = [51,27,13,56] 
b = dict([ ((i,a[i]) for i in range(len(a)) ]) 
print b 
Các vấn đề liên quan