我正在尝试使用 Python 从字典中向 MySQL 表添加数据。我的字典由与不同长度的值列表关联的键组成——长度从 1 到 150 左右不等。我正在使用插入语句将我的数据插入表中,其中键是字段名称。这就是我希望 sql 插入语句基本上是这样的:
INSERT INTO table
(key1, key2, key3, ...)
VALUES
(key1value1, key2value1, key3value1, ...),
(key1value2, key2value2, key3value2, ...),
(key1value3, key2value3, key3value3, ...);
等等,但我也可以做一个 for 循环,以便每组值有一个插入语句。这是我的列表的第一个元素:
cols = dict.keys()
vals = dict.values()
lst = [item[0] for item in vals]
sql = "INSERT INTO table (%s) VALUES (%s);" % (','.join(map(str, cols[:len(cols)])), "'{}'".format("','".join(lst)))
cursor.execute(sql)
这很有效,有效地将我的第一组数据插入到我表中的一个新行中。但问题是当我尝试增加 lst 中的索引时,例如增加到 item[1],它说索引超出范围,因为我有一些列表只有一个元素。由于列表的长度各不相同,因此我需要使其足够通用,以便它始终适用于每个列表包含的元素数量。
如果某些列表的索引在增加时超出范围,那么我希望它跳过那些但继续插入其余部分。我该怎么做?
最佳答案
第一个示例将为您提供字典中每个值的第 第
个元素,当最短列表用完时完全停止。
第二个示例将继续,并且只在一个列表太短的地方使用 None
值。
from itertools import zip_longest
d = {'k1':[1,2,3],
'k2':[1,2,3,4,5,6],
'k3':[1,8]}
for k in d.keys():
for v in zip(*d.values()):
print(k,v)
for k in d.keys():
for v in zip_longest(*d.values()):
print(k,v)
关于python - 迭代不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45871944/