2013-07-07 32 views
5

Python sözlüğünü anlamayı öğrenmeye çalışıyorum ve bir satırda aşağıdaki işlevlerin neler yapılabileceğini düşünüyorum. n+1'u ilk sırada olduğu gibi yapamam veya range()'u ikinci sırada kullanmaktan kaçındım.Python sözlük anlama örneği

test1()'da olduğu gibi, anlama sırasında otomatik olarak artan bir sayaç kullanmak mümkün mü?

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

'Range' anlamında 'range' kullanmak uygun mudur? – ersran9

cevap

10

çalışır:

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

Not göre, b için ters eşleştirmesini, yani eşleme 1a için, 2 isteseydi vs, basitçe yapabilirsiniz:

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

Bu O enumerate işlevini kullanarak oldukça basit

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

Teşekkürler, ben zip() 'bilmiyordum. '' Range() 'yi bir anlama dahilinde kullanmak uygun mudur? – stenci

+1

@stenci emin, menzil içerisindeki anlamalarını kullanabilirsiniz – ersran9

+1

Menzili kullanmak istemiyorsanız, @ Bakuriu numaralandırması çözümünü kullanın. – ersran9