如何仅从 zip 中解压部分参数,而不是全部?

问题描述 投票:0回答:3

我的sql查询:

 select id,value,zvalue from axis

给我这样的结果:

   ans=(1,23,34)(12,34,35)(31,67,45)(231,3412,234)

现在如果我想要所有这 3 个变量作为 3 个不同的列表

id,value,zvalue=zip(*ans)

它会给我 3 个单独的列表。 但如果我只想将 id 和 value 作为单独的列表。它会给我太多的值来解包错误。

id,value =zip(*ans)

有什么方法可以让我从 sql 查询创建任意数量的列表。因为如果查询中有 10 个参数,我必须在使用 ZIP 时使用所有参数??? 请帮忙

python iterable-unpacking
3个回答
15
投票

参数的数量必须匹配,这是Python 2中的规则。对于Python 3,您可以使用*来捕获到列表中。

常见的 pythonic (2.x) 解决方法是使用

_
来表示您不会使用的变量,即:

id,value,_ = zip(*ans) # only works for exactly three values

正如 DSM 所评论的,对于 Python 3,您可以使用 * 来获取“剩余”参数作为列表:

id, value, *_ = zip(*ans) # _ will be a list of zero or more args

或者,最简单,只需对 zip 的返回进行切片:

id,value = zip(*ans)[:2] # ignore all but first two values  

3
投票

如果您使用的是 Python 3,您可以使用它来解压 n 附加元素:

In [0]: a, b, *_ = (1, 2, 3, 4)

In [1]: a
1

1
投票

我想你可能正在寻找这样的东西:

ids = [t[0] for t in ans]
values = [t[1] for t in ans]

第一个列表理解获取

ans
中所有元组中的第一列,即
id
列。第二个列表理解获取
ans
中所有元组的第二列,即
value
列。

© www.soinside.com 2019 - 2024. All rights reserved.