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

2024-09-30 12:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一句话:

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

这不符合顺序。有朋友能帮忙吗


Tags: testaccountkeysmeterjoincompanynamesoftwareversionf54eef46be82
3条回答

在这里,您将根据键对dict进行排序->

test =','.join(str(d[x][0]) for x in sorted(d))

排序(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}'
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可以按行读取数据列表,以构建要发送到数据库的行。然后使用^{}可以传递将在参数化查询中使用的值列表

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)

相关问题 更多 >

    热门问题