我有以下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
我想提取errata_id和summary的值(只是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
答案 0 :(得分:1)
如果我了解你想用{id,summary}创建一个字典,那么你可以这样做:
ERRATA_ID_DICT = {}
for element in erratas_by_cve_dic['results']:
ERRATA_ID_DICT[element['errata_id']] = element['summary']
答案 1 :(得分:0)
有两种可能的方法:
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'] }
我更喜欢第二种方法,因为它不仅更短,而且更加pythonic(即使用Python习语)。