gpt4 book ai didi

python - 迭代不同长度的列表

转载 作者:行者123 更新时间:2023-11-30 21:54:25 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com