5

我正在尝试学习 Python 字典理解,我认为可以在一行中完成以下函数的操作。我无法n+1在第一个中使用 as 或避免range()在第二个中使用 as。

是否可以使用在理解过程中自动递增的计数器,如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
4

2 回答 2

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}

请注意,如果您想要逆映射,即映射1a2b等,您可以简单地执行以下操作:

>>> dict(enumerate(L, start=1))
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
于 2013-07-07T16:28:14.577 回答
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}
于 2013-07-07T16:23:48.117 回答