首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当找不到给定的字典键时,尝试包含一个空值

当找不到给定的字典键时,尝试包含一个空值
EN

Stack Overflow用户
提问于 2022-09-22 19:53:11
回答 2查看 30关注 0票数 0

我有一个设备软件列表,我正试图制作一个字典,其中键是软件的名称,并将所有版本的数组都值给这个键。

设备软件列表格式

代码语言:javascript
复制
[
    [
        {"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"},
    ],
]

我想做的是:

代码语言:javascript
复制
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)

我得到的是:

代码语言:javascript
复制
[
    {"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"]},
]

我已经想了好几个小时了,但我无法得到预期的结果

预期结果:

代码语言:javascript
复制
[
    {"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"]},
]

当软件不在该设备上时,我如何在给定密钥的值中添加空值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-22 20:23:37

这里有一种方法,您可以使用单一字典来获得输出,而不是字典列表。关键的洞察力是将值预先填充为None列表。请随时提出任何澄清性的问题。

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
{'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']}
票数 1
EN

Stack Overflow用户

发布于 2022-09-22 19:57:16

software\_version = software["version"]

你的问题有点含糊。当软件不存在于该设备上时,我假设上面的KeyError会发生爆炸。

使用:

代码语言:javascript
复制
    software_version = software.get("version")

另外,请广播电台:https://docs.python.org/3/library/stdtypes.html#dict.get

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73819999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档