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

Python字典列表按elementid分组合并:去重并重组参数

解决方案

实现思路

  1. 提取每个字典的主ID段:对elementid按.分割,取前两段拼接(比如BsWfsElement.1.1 → BsWfsElement.1),以此作为分组键。
  2. 用临时字典存储分组数据:键是主ID,值为该组的基准字典(即elementid以.1结尾的字典)。
  3. 遍历所有字典:
    • 若当前字典是基准项(子ID为1):初始化基准字典,保留obstime、lon、lat等固定字段,同时将当前的paramname和paramvalue转为键值对加入。
    • 若当前字典是附加项(子ID为2/3/4等):找到对应主ID的基准字典,直接将paramname和paramvalue转为键值对添加进去。
  4. 最后提取临时字典中的所有值,就是最终的结果列表。

代码实现

def process_elements(element_list):
    groups = {}
    for elem in element_list:
        # 分割elementid,提取主ID和子ID
        id_parts = elem['elementid'].split('.')
        main_id = '.'.join(id_parts[:2])
        sub_id = id_parts[-1]
        
        if sub_id == '1':
            # 初始化基准字典:保留固定字段,加入当前参数
            base_dict = {
                'obstime': elem['obstime'],
                'lon': elem['lon'],
                'lat': elem['lat']
            }
            base_dict[elem['paramname']] = elem['paramvalue']
            groups[main_id] = base_dict
        else:
            # 附加项:将参数添加到对应基准字典
            if main_id in groups:
                groups[main_id][elem['paramname']] = elem['paramvalue']
    # 提取所有分组后的基准字典,转为列表
    return list(groups.values())

测试示例

输入:

input_list = [
    {'elementid': 'BsWfsElement.1.1', 'obstime': '2022-07-11T20:00:05', 'lon': '59.86400', 'lat': '32.05570', 'paramname': 'multiplicity', 'paramvalue': '4'},
    {'elementid': 'BsWfsElement.1.2', 'obstime': '2022-07-11T20:00:05', 'lon': '59.86400', 'lat': '32.05570', 'paramname': 'intensity', 'paramvalue': '10'},
    {'elementid': 'BsWfsElement.2.1', 'obstime': '2022-07-11T21:00:00', 'lon': '60.12300', 'lat': '31.89000', 'paramname': 'multiplicity', 'paramvalue': '2'}
]

输出:

[
    {'obstime': '2022-07-11T20:00:05', 'lon': '59.86400', 'lat': '32.05570', 'multiplicity': '4', 'intensity': '10'},
    {'obstime': '2022-07-11T21:00:00', 'lon': '60.12300', 'lat': '31.89000', 'multiplicity': '2'}
]

注意事项

  • 假设同主ID下的obstime、lon、lat字段值一致,无需处理冲突;如果存在不一致的情况,可以根据需求添加冲突处理逻辑(比如保留基准项的值,或者抛出警告)。
  • 如果附加项对应的主ID不存在(即没有.1结尾的基准项),代码会跳过该附加项;如果需要处理这种情况,可以添加日志或默认逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:10:30