繁体   English   中英

值是列表时如何对 python 字典进行排序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM