我一直在试图弄清楚如何将值列表作为pydblite.insert(* args)的单个参数传递。列表'temp'和'keys'中的每个值必须分别是.insert()和.create()函数的单独参数。
def copyToMemory(self, table, items):
db = Base(table + ".pdl")
if not (db.exists()):
keys = ""
for key, val in items[0].items(): keys += key + ', '
#db.create(keys)
db.open()
for i in items:
temp = []
for val in i.itervalues():
temp += val
#db.insert(temp)
答案 0 :(得分:1)
对于db.create()
,构造一个键列表并将它们作为解压缩的参数传递,如下所示:
db.create(*items[0].keys())
由于items
是字典列表,因此您只需使用dict.keys()
即可使用列表中的第一项获取密钥列表。然后解压缩该密钥列表以将位置参数传递给create()
函数。有关参考,请参阅* in function calls。
因为dict.keys()
是无序的,所以上面假设您并不特别关心表中字段的顺序。
对于db.insert()
,您可以使用**
传递解压缩的词典:
for item in items:
db.insert(**item)
见** in function calls。这会将参数作为关键字参数传递给函数。请注意,顺序无关紧要 - 表中的字段将与字典中的相应项正确关联。