【问题标题】:Add one row at at a time from lists to new object从列表一次添加一行到新对象
【发布时间】:2018-11-12 13:05:44
【问题描述】:

如果我创建列表来为每个将成为数据库表的列保存一列。我将如何循环遍历 ID 列表以一次将一行添加到新对象。因此,每个对象将保留一行作为数据库表。

示例列表

ListID[1,2,3,4,5]
List1[34,56,34,345,55]
list2[644,64,232,44,1]
list3[622,12,44,55,01]

然后我想创建一个函数,它将遍历 ListID 并创建一个“list 对象”,例如,[1, 34, 644, 622] 将是第一个对象,然后是 [2, 56, 64, 12]。我不确定如何执行此操作,但将其保留为仍可保存到数据库表中的格式

【问题讨论】:

  • 为了这个特定的目的,您可以使用列表的列表,其中 ListID 是第一个,其余的将在后面。然后,您可以简单地遍历列表并选择每个列表的第 N 个元素。
  • 你不能用df吗?

标签: python


【解决方案1】:

如果我理解正确,您可以使用zip

ListID = [1,2,3,4,5]
List1 = [34,56,34,345,55]
list2 = [644,64,232,44,1]
list3 = [622,12,44,55,1]

objectList = [list(elem) for elem in zip(ListID,List1,list2,list3)]
print(objectList)

输出:

[[1, 34, 644, 622], [2, 56, 64, 12], [3, 34, 232, 44], [4, 345, 44, 55], [5, 55, 1, 1]]

另一种方法是使用map 函数和zip

objectList = list(map(lambda elem: list(elem), zip(ListID,List1,list2,list3)))

【讨论】:

  • 是否仍然可以将其保存到数据库表中的单独列中,就像我可以为每列使用单独的列表一样?
  • 对于持久性,最好查看sqlite3pickle(参考this 问题)。
【解决方案2】:

您可以结合zip使用字典,这样您也可以使用ListID检索数据:

ListID = [1,2,3,4,5]
List1 = [34,56,34,345,55]
List2 = [644,64,232,44,1]
List3 = [622,12,44,55,1]
dictObj = {}

for ID, l1, l2, l3 in zip(ListID, List1, List2, List3):
    dictObj[f'{ID}'] = [ID, l1, l2, l3]

【讨论】:

  • 那么即使 ListID 从 45 开始,字典键也会从 45 开始吗?我还能像为每列使用单独的列表一样将字典保存到数据库表中吗?
  • @Liights 是的,字典的键将与您的 ListID 匹配。而且您应该能够轻松地从 dict 中获取值并将它们保存到数据库中。
【解决方案3】:

如果您不想使用任何第三方库,如 pandas,可以使用 defaultdict 轻松实现:

from collections import defaultdict

dd = defaultdict(list)

listID = [1,2,3,4,5]
list1 = [34,56,34,345,55]
list2 = [644,64,232,44,1]
list3 = [622,12,44,55,1]

for idx, c1, c2 in zip(listID,list1, list2):
    dd[idx].extend([c1, c2])

dd
# defaultdict(list,
#            {1: [34, 644],
#             2: [56, 64],
#             3: [34, 232],
#             4: [345, 44],
#             5: [55, 1]})


for idx, item in zip(listID,list3):
    dd[idx].append(item)

dd
# defaultdict(list,
#            {1: [34, 644, 622],
#             2: [56, 64, 12],
#             3: [34, 232, 44],
#             4: [345, 44, 55],
#             5: [55, 1, 1]})

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多