You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过for循环从嵌套JSON中提取键值对并存储为字典

问题

我有一个由多层字典和列表嵌套组成的JSON数据,目前通过for循环可以分别将code提取到code_details列表、url提取到url_details列表,但希望调整循环逻辑,把结果存储为{'code': 'url'}格式的字典。

原代码:

code_details = []
url_details = []

for item in all_content:
    code_details.append(item ['code'])
    media_details = item ['media']
    for i in media_details:
        resources_details = i['resources']
        for j in resources_details:
            url_details.append(j ['url'])

JSON示例数据:

all_content = [
    {
        "code": "0100410ZWA",
        "media": [
            {
                "containsExplicitContent": true,
                "imageType": "Packshot",
                "resources": [
                    {
                        "expirationDate": "2021-05-20T11:07:00Z",
                        "format": "ORIGINAL",
                        "url": "https://media.lingeriestyling.com/marie_jo_l'aventure-lingerie-padded_bra-tom-0120826-pink-0_L_35590.jpg"
                    }
                ]
            }
        ]
    }
]

code_details示例:

['0502570SRE',
'0102649ALF',
'0602640ALF',
'0502572SRE',
'0102646ALF',
'0102570SRE',
'0502571SRE',
'0602570SRE',
'0502640ALF',
'0102640ALF',
'0102574SRE',
'0502642ALF',
'0102576SRE',
'0502641ALF',
'0663321AME',
'0163244AUT',
'0563240AUT',
'0663320AME']

url_details示例:

['https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-0_3558237.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-0_3560011.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-2_3560012.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-3_3560013.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-0_3558965.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-2_3558970.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-briefs-danae-0502570-red-3_3558976.jpg',
'https://media.lingeriestyling.com/eservices/marie_jo-lingerie-balcony_bra-raia-0102649-multicolour-0_3558308.jpg']
解决方案

从示例数据能看出一个code可能对应多个url,而字典的键具有唯一性,因此提供两种适配场景的实现方式:

方式1:一个code对应单个url(取首个匹配的url)

如果每个code仅需要关联一个url,可按以下逻辑实现,避免后续url覆盖已有值:

code_url_dict = {}

for item in all_content:
    current_code = item['code']
    if current_code not in code_url_dict:
        for media in item['media']:
            for resource in media['resources']:
                code_url_dict[current_code] = resource['url']
                # 取第一个url后跳出循环
                break
            else:
                continue
            break

方式2:一个code对应多个url(值为url列表)

如果需要保留code对应的所有url,将字典值设为列表更合理:

code_url_dict = {}

for item in all_content:
    current_code = item['code']
    # 初始化空列表(若code未在字典中)
    if current_code not in code_url_dict:
        code_url_dict[current_code] = []
    # 遍历所有层级,收集当前code对应的所有url
    for media in item['media']:
        for resource in media['resources']:
            code_url_dict[current_code].append(resource['url'])

场景说明

  • 方式1适合每个code仅对应一个有效url的业务场景;
  • 方式2更贴合你的示例数据结构,能完整保留code与所有关联url的映射关系。

内容的提问来源于stack exchange,提问作者Ron Kieftenbeld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:55:23