2013-07-07 45 views
5

Tôi đang cố gắng học từ điển Python hiểu và tôi nghĩ có thể thực hiện theo một dòng những chức năng sau đây. Tôi không thể tạo số n+1 như lần đầu tiên hoặc tránh sử dụng range() như trong lần thứ hai.Ví dụ về đọc từ điển Python

Có thể sử dụng bộ đếm tự động tăng trong khi hiểu, như trong test1() không?

def test1(): 
    l = ['a', 'b', 'c', 'd'] 
    d = {} 
    n = 1 
    for i in l: 
     d[i] = n 
     n = n + 1 
    return d 

def test2(): 
    l = ['a', 'b', 'c', 'd'] 
    d = {} 
    for n in range(len(l)): 
     d[l[n]] = n + 1 
    return d 
+0

Bạn có thể sử dụng 'dải ô' trong phép đọc' dict' không? – ersran9

Trả lời

10

Nó khá đơn giản bằng cách sử dụng enumerate chức năng:

>>> L = ['a', 'b', 'c', 'd'] 
>>> {letter: i for i,letter in enumerate(L, start=1)} 
{'a': 1, 'c': 3, 'b': 2, 'd': 4} 

Lưu ý rằng, nếu bạn muốn ánh xạ ngược, tức là lập bản đồ 1-a, 2-b v.v., bạn có thể chỉ cần thực hiện:

>>> dict(enumerate(L, start=1)) 
{1: 'a', 2: 'b', 3: 'c', 4: 'd'} 
1

này hoạt động

>>> l = ['a', 'b', 'c', 'd'] 
>>> { x:(y+1) for (x,y) in zip(l, range(len(l))) } 
{'a': 1, 'c': 3, 'b': 2, 'd': 4} 
+0

Cảm ơn, tôi không biết 'zip()'. Có ok để sử dụng 'range()' bên trong một hiểu? – stenci

+1

@stenci chắc chắn, bạn có thể sử dụng phạm vi bên trong sự hiểu biết – ersran9

+1

Nếu bạn không muốn sử dụng phạm vi, hãy sử dụng giải pháp liệt kê @ Bakuriu. – ersran9