我有一个设备软件列表,我正试图制作一个字典,其中键是软件的名称,并将所有版本的数组都值给这个键。
设备软件列表格式
[
[
{"name": "openjdk-8-jre", "version": "8u171-b11-1~deb9u1"},
{"name": "python2.7", "version": "2.7.13"},
{"name": "npm", "version": "8.0.0"},
],
[
{"name": "openjdk-8-jre", "version": "8u171-b11-1~deb9u1"},
],
[
{"name": "python2.7", "version": "2.7.13"},
{"name": "npm", "version": "7.0.0"},
],
]我想做的是:
softwares = {}
for software in all_equipment_softwares:
softwares[software] = []
for equipment in equipments_dump:
for software in equipment["softwares"]:
software_name = software["name"]
software_version = software["version"]
softwares[software_name].append(software_version)我得到的是:
[
{"openjdk-8-jre": ["8u171-b11-1~deb9u1", "8u171-b11-1~deb9u1"]},
{"python2.7": ["2.7.13", "2.7.13"]},
{"npm": ["8.0.0", "7.0.0"]},
]我已经想了好几个小时了,但我无法得到预期的结果
预期结果:
[
{"openjdk-8-jre": ["8u171-b11-1~deb9u1", "8u171-b11-1~deb9u1", None]},
{"python2.7": ["2.7.13", None, "2.7.13"]},
{"npm": ["8.0.0", None, "7.0.0"]},
]当软件不在该设备上时,我如何在给定密钥的值中添加空值?
发布于 2022-09-22 20:23:37
这里有一种方法,您可以使用单一字典来获得输出,而不是字典列表。关键的洞察力是将值预先填充为None列表。请随时提出任何澄清性的问题。
softwares = {}
softwares_length = len(all_equipment_softwares)
#iterate through each software_list of all_equipment_softwares
for count, software_list in enumerate(all_equipment_softwares):
#iterate through each software of software_list
for software in software_list:
#if it's a software we haven't seen add it to our dictionary with an array full of None based on the length of all_equipment_softwares
if software['name'] not in softwares:
softwares[software['name']] = [None] * softwares_length
#update the dictionary value (the list) from None to the software version
softwares[software['name']][count] = software['version']
print(software)输出
{'openjdk-8-jre': ['8u171-b11-1~deb9u1', '8u171-b11-1~deb9u1', None],
'python2.7': ['2.7.13', None, '2.7.13'],
'npm': ['8.0.0', None, '7.0.0']}发布于 2022-09-22 19:57:16
software\_version = software["version"]
你的问题有点含糊。当软件不存在于该设备上时,我假设上面的KeyError会发生爆炸。
使用:
software_version = software.get("version")另外,请广播电台:https://docs.python.org/3/library/stdtypes.html#dict.get
https://stackoverflow.com/questions/73819999
复制相似问题