拉链列表太多项目无法解包



我有一个包含 13 个列表的压缩列表。我想将这些项目插入到 mysql 数据库中。这是我的代码:

zipped_list=zip(list1,list2...list13)
for a,b,c,d,e,f,g,h,i,j,k,l,m in zipped_list:
    cur.execute("INSERT INTO QB_global_sentiment(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s) VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" %("date","US_pos","US_neg","US_neu","UK_pos","UK_neg","UK_neu","CA_pos","CA_neg","CA_neu","AU_pos","AU_neg","AU_neu",str(m), str(a),str(b),str(c),str(d),str(e),str(f),str(g),str(h),str(i),str(j),str(k),str(l)))

这是我的错误:

    for a,b,c,d,e,f,g,h,i,j,k,l,m in zipped_list:
ValueError: too many values to unpack

我同意有太多的项目,而且真的很长。.有没有更好的方法可以做到这一点?

谢谢!

听起来你有一个包含 13 个列表的列表,并且想要并行迭代。为此,您可以使用 zip() ,如下面的简单示例所示:

In [8]: l = [[1, 2, 3], [4, 5, 6]]
In [9]: for a, b in zip(*l):
   ...:     print a, b
   ...:     
1 4
2 5
3 6

我同意有太多的项目,而且真的很长。

该消息并不意味着"太多",即"超过x个数字是一个坏主意"。 这意味着"太多",因为压缩元素的数量与变量的数量不匹配。

FWIW,你不需要解压缩成单独的变量(execute() 方法将接受元组或列表),也不需要有一个 for 循环(executemany() 方法将为你做到这一点)。 此外,execute() 方法将进行替换,具有以下几个好处:帮助避免 sQL 注入攻击、提高速度和提高清晰度。

尝试以下操作:

cur.executemany('''INSERT INTO QB_global_sentiment(date, US_pos, US_neg, US_neu, UK_pos, UK_neg, UK_neu, CA_pos, CA_neg, CA_neu, AU_pos, AU_neg , AU_neu)
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', combined_data)

建议

  1. 如果值将在运行时更改,则可能需要对它们进行硬编码,而不是填充它们。

  2. 最好
  3. 解决迭代中返回的项中的项数问题。

如果我是你,我会像这样做

for row in zipped_list:
    print ("...{} {} {} {}".format(*row[:4])

这会从zipped_list中获取列表/元组,并且仅使用要实际填充的列数。

例:

data = [[1, 2, 3], [4, 5, 6]]
for a in data:
    print("{} {}".format(*a[:2]))

输出

1 2
4 5

最新更新