Python从包含2个列表的列表中的每个字典中提取2个值

2024-04-28 17:28:57 发布

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

我有以下json:

    {
"error": null,
"page": "1",
"per_page": "1000",
"results": [
    {
        "cves": [
            {
                "cve_id": "CVE-2016-1583",
                "href": "https://www.redhat.com/security/data/cve/CVE-2016-1583.html"
            },
            {
                "cve_id": "CVE-2016-5195",
                "href": "https://www.redhat.com/security/data/cve/CVE-2016-5195.html"
            }
        ],
        "description": "The kernel packages contain the Linux kernel, the core of any Linux operating\nsystem.\n\nSecurity Fix(es):\n\n* A race condition was  With this update, a set of patches has been applied that fix\nthese problems. As a result, the time stamps of GFS2 files are now handled\ncorrectly. (BZ#1374861)",
        "errata_id": "RHSA-2016:2124",
        "hosts_applicable_count": 0,
        "hosts_available_count": 0,
        "id": "81ee41e6-2a3a-4475-a88e-088dee956787",
        "issued": "2016-10-28",
        "packages": [
            "kernel-2.6.18-416.el5.i686",

        ],
        "reboot_suggested": true,
        "severity": "Important",
        "solution": "For details on how to apply this update, which includes the changes described in\nthis advisory, refer to:\n\nhttps://access.redhat.com/articles/11258\n\nThe system must be rebooted for this update to take effect.",
        "summary": "An update for kernel is now available for Red Hat Enterprise Linux 5.\n\nRed Hat Product Security

我想提取勘误表id和摘要的值(只是RHEL版本) 我想把它放在一个新字典里,即:RHSA-2016:2098:Red Hat Enterprise Linux 5

我能够提取勘误表,但不能将摘要作为字典,而只是作为列表:

ERRATA_ID_LIST = []
for errata_ids in erratas_by_cve_dic['results']:
    ERRATA_ID = errata_ids['errata_id']
    ERRATA_ID_LIST.append(ERRATA_ID

Tags: ofthecomidforlinuxupdatethis
2条回答

有两种可能的方法:

1)像您一样使用for循环,但将数据放入字典:

errata = {}
for errata_ids in erratas_by_cve_dic['results']:
  errata_id = errata_ids['errata_id']
  summary = errata_ids['summary']
  errata[errata_id] = summary

或者,较短但可能不太清晰:

errata = {}
for errata_ids in erratas_by_cve_dic['results']:
  errata[errata_ids['errata_id']] = errata_ids['summary'] 

2)使用词典理解:

errata = { errata_ids['errata_id']: errata_ids['summary'] for errata_ids in erratas_by_cve_dic['results'] }

我更喜欢第二种方法,因为它不仅更短,而且更像Python(即使用Python习惯用法)。你知道吗

如果我知道您想创建一个带有{id,summary}的字典,那么您可以:

ERRATA_ID_DICT = {}
for element in erratas_by_cve_dic['results']:
    ERRATA_ID_DICT[element['errata_id']] = element['summary']

相关问题 更多 >