繁体   English   中英

解压错误的值太多

[英]Too many values to unpack error

嗨,我正在使用元组列表,我想将其转换为字典。 我正在使用列表推导,下面是我的代码:

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

我无法确定我哪里出错了。

total_leftover = [('alice',0),('carrot',4)]

你这样做是错的! 你的列表理解等同于

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

注意问题在于第二个循环, leftover是一个2元组,你试图迭代它,一次解包两个元素。 这是不正确的,因为元组只有两个标量(你试图每次迭代提取两个标量,并且有区别)。

如果您只是将值映射到键,那么这应该足够了。 反向使用每一个元组map + reversed ,然后结果传递给dict

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

字典理解是迄今为止最高效的方法 ,因为它是语言文字语法的一部分,而不是设置生成器并将字典创建委托给函数调用。

基本问题是你有太多级别的循环。 如果你想将它作为列表理解,你只需要一个级别:

dict((position, token) for token, position in total_leftover)

请注意,这可以进一步简化为dict理解:

{position: token for token, position in total_leftover}

您也可以尝试以不同的方式解压缩元组

dict((position, token) for (token, position) in total_leftover)
{0: 'alice', 4: 'carrot'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM