zip列表太多要解压的项目

时间:2014-12-12 06:40:18

标签: python for-loop zip mysql-python

我有一个包含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

我同意项目太多而且它真的很长......有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

听起来你有一个包含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

答案 1 :(得分:2)

  

我同意项目太多而且很长。

这个消息并不意味着“超过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)

答案 2 :(得分:0)

<强>建议

  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