[英]How sorted python dictionary while value is list?
我有一个这样的字典:
d = {
"Meter": ["000413031", "000413032", "000413034", "000413035"],
"Account": ["314113801", "314113802", "314114140", "314114221"],
"AcceptedDate": ["20210226", "20210226", "20210226", "20210226"],
"EulaVersion": ["2018v01FXRSSWO", "2018v01FXRSSWO", "2018v01FXRSSWO", "2018v01FXRSSWO"],
"SoftwareVersion": ["FXRS1810", "FXRS1810", "FXRS1810", "FXRS1810"],
"CompanyName": ["SN2000 TEST", "SN2000 TEST", "SN2000 TEST", "SN2000 TEST"],
"MachGuid": ["{B2B94738-B031-46B2-9D94-F54EEF46BE82}", "{B2B94738-B031-46B2-9D94-F54EEF46BE82}", "{B2B94738-B031-46B2-9D94-F54EEF46BE82}", " {B2B94738 - B031 - 46 B2 - 9 D94 - F54EEF46BE82}"]
}
因为我需要将它戏剧性地插入到db中,所以我首先通过以下方式获取所有列名:
keys = ','.join(d.keys())
我得到:
Meter,Account,AcceptedDate,EulaVersion,SoftwareVersion,CompanyName,MachGuid
这正是我想要的。
dict 的值都是列表。
所以我需要一个一个得到它。
当我尝试时:
test =','.join(str(d[x][0]) for x in sorted(d))
这意味着只需获取列表中的第一个值,但我收到:
20210226,314113801,SN2000 TEST,2018v01FXRSSWO,{B2B94738-B031-46B2-9D94-F54EEF46BE82},000413031,FXRS1810
这不是顺序。有朋友可以帮忙吗?
for record in zip(*d.values()):
print(record)
为您提供每个“记录”作为值列表,例如:
columns = ','.join(d)
placeholders = ','.join('?' for _ in d)
for record in zip(*d.values()):
sql = f'INSERT INTO table({columns}) VALUES({placeholders})'
your_db.execute(sql, record)
使用zip
您可以逐行读取数据列表,以构建要发送到数据库的行。 然后使用cursor.executemany
您可以传递将在参数化查询中使用的值列表
keys = ','.join(d.keys())
param_placeholder = ','.join(['%s'] * len(d.keys()))
values = list(zip(*d.values()))
query = f"INSERT INTO MY_TABLE ({keys}) VALUES ({param_placeholder})"
cursor.executemany(query, values)
那是一样的
query = f"INSERT INTO MY_TABLE ({keys}) VALUES ({param_placeholder})"
for row in zip(*d.values()):
cursor.execute(query, row)
在这里,您正在根据键对字典进行排序 ->
test =','.join(str(d[x][0]) for x in sorted(d))
sorted(d) 的结果是 ->
['AcceptedDate',
'Account',
'CompanyName',
'EulaVersion',
'MachGuid',
'Meter',
'SoftwareVersion']
现在,如果您从该排序列表中获取第一个值,您将得到 ->
20210226,314113801,SN2000 TEST,2018v01FXRSSWO,{B2B94738-B031-46B2-9D94-F54EEF46BE82},000413031,FXRS1810
如果不执行排序操作并加入 ->
test =','.join(str(d[x][0]) for x in d)
# prints '000413031,314113801,20210226,2018v01FXRSSWO,FXRS1810,SN2000 TEST,{B2B94738-B031-46B2-9D94-F54EEF46BE82}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.