2013-07-07 1 views
5

Я пытаюсь изучить Python-словарь, и я думаю, что в одной строке можно сделать то, что делают следующие функции. Я не смог сделать n+1, как в первом, или не использовать range(), как и во втором.Пример понимания словаря Python

Можно ли использовать счетчик, который автоматически увеличивается при понимании, как в test1()?

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' в' dict' понимании? – ersran9

ответ

10

Это довольно просто, используя enumerate функцию:

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

Обратите внимание, что, если вы хотите обратное отображение, т.е. отображение 1 в a, 2 к b и т. д., вы можете просто сделать:

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

Это работает

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

Спасибо, я не знал 'zip()'. Можно ли использовать 'range()' внутри понимания? – stenci

+1

@stenci конечно, вы можете использовать диапазон внутри понятий – ersran9

+1

Если вы не хотите использовать диапазон, используйте перечислимое решение @ Bakuriu. – ersran9