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

如何合并嵌套字典列表中多个'descr'键的多值至同一键?

合并嵌套字典列表中的多个descr键值对

当然可行!咱们来一步步解决这个问题:

先看你的原始数据:

original_data = [
    [
        {'end': 3250741247, 'ip_range': '193.194.64.0 - 193.194.95.255', 'start': 3250733056},
        {'descr': 'PROVIDER'},
        {'descr': 'Algerian Academic Research Network'},
        {'country': 'DZ'}
    ],
    [
        {'end': 3273187327, 'ip_range': '195.24.192.0 - 195.24.223.255', 'start': 3273179136},
        {'descr': 'Data communication and international'},
        {'descr': 'telecommunication of Cameroon'},
        {'country': 'CM'}
    ]
]

你的尝试代码没成功,主要是因为字典推导的逻辑有误,而且只是追加了新字典,没有替换原来的多个descr项。下面是两种可行的实现方式:

方法1:合并为列表(推荐)

这种方式保留了所有描述的独立性,方便后续操作:

def merge_descr_to_list(data):
    processed_data = []
    for block in data:
        # 分离非descr字典和收集descr值
        non_descr_dicts = []
        descr_values = []
        for dic in block:
            if 'descr' in dic:
                descr_values.append(dic['descr'])
            else:
                non_descr_dicts.append(dic)
        # 如果有收集到descr值,添加合并后的字典
        if descr_values:
            non_descr_dicts.append({'descr': descr_values})
        processed_data.append(non_descr_dicts)
    return processed_data

# 调用函数处理数据
result = merge_descr_to_list(original_data)
print(result)

运行后得到的正确结果:

[
    [
        {'end': 3250741247, 'ip_range': '193.194.64.0 - 193.194.95.255', 'start': 3250733056},
        {'country': 'DZ'},
        {'descr': ['PROVIDER', 'Algerian Academic Research Network']}
    ],
    [
        {'end': 3273187327, 'ip_range': '195.24.192.0 - 195.24.223.255', 'start': 3273179136},
        {'country': 'CM'},
        {'descr': ['Data communication and international', 'telecommunication of Cameroon']}
    ]
]

方法2:合并为拼接字符串

如果需要把描述合并成一个可读性更强的字符串,只需要修改添加descr字典的部分:

def merge_descr_to_string(data, separator=', '):
    processed_data = []
    for block in data:
        non_descr_dicts = []
        descr_values = []
        for dic in block:
            if 'descr' in dic:
                descr_values.append(dic['descr'])
            else:
                non_descr_dicts.append(dic)
        if descr_values:
            # 用指定分隔符拼接所有描述
            non_descr_dicts.append({'descr': separator.join(descr_values)})
        processed_data.append(non_descr_dicts)
    return processed_data

# 调用示例
result = merge_descr_to_string(original_data)
print(result)

得到的结果:

[
    [
        {'end': 3250741247, 'ip_range': '193.194.64.0 - 193.194.95.255', 'start': 3250733056},
        {'country': 'DZ'},
        {'descr': 'PROVIDER, Algerian Academic Research Network'}
    ],
    [
        {'end': 3273187327, 'ip_range': '195.24.192.0 - 195.24.223.255', 'start': 3273179136},
        {'country': 'CM'},
        {'descr': 'Data communication and international, telecommunication of Cameroon'}
    ]
]

核心逻辑说明

  1. 遍历每个子列表(block),把里面的字典分成两类:不含descr的直接保留,含descr的提取值收集起来
  2. 收集完所有descr值后,创建一个新的descr字典,值为列表或拼接字符串
  3. 把新的descr字典加入到保留的非descr字典列表中,组成处理后的block
  4. 所有block处理完成后返回结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:55:37