嗨,我正在处理一个元组列表,我想把它转换成一个dict。我正在使用列表理解,下面是我的代码:

output_dict["leftovers"] = dict((position, token) for leftover in total_leftover
                                    for token, position in leftover)

我不知道我错在哪里。
total_leftover = [('alice',0),('carrot',4)]

最佳答案

!Your list comprehension equates to

for leftover in total_leftover:
    for token, position in leftover:
        ...

注意第二个循环的问题是,leftover是一个2元组,您正在尝试遍历它,一次解包两个元素。这是不正确的,因为元组只有两个标量(您试图每次迭代提取两个标量,这是有区别的)。
如果只是将值映射到键,那么这就足够了。。
>>> dict(map(reversed, total_leftover))
{0: 'alice', 4: 'carrot'}

或者,使用听写理解和交换项目。
>>> {y : x for x, y in total_leftover}
{0: 'alice', 4: 'carrot'}

作为一个更好使用的问题,我将做一些基准测试。首先,设置-
x = np.arange(1000000)
y = x.copy()
np.random.shuffle(x)

z = list(zip(x, y))

# solution with `map` + `reversed`
%timeit dict(map(reversed, z))
1 loop, best of 3: 965 ms per loop

# Daniel Roseman's solution with `dict`
%timeit dict((y, x) for x, y in z)
1 loop, best of 3: 341 ms per loop

# dict comprehension
%timeit {y : x for x, y in z}
1 loop, best of 3: 235 ms per loop

字典理解是目前为止最有效的方法,因为它是语言字面语法的一部分,而不是建立一个生成器并将字典创建委托给一个函数调用。

10-06 14:24