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

如何在Python列表中基于相同键值合并元素(以category和code匹配为例)

合并同category和code的对象(高效解法)

嘿,我完全懂你要解决的问题——把数组里category和code同时匹配的对象合并,而且不想用嵌套循环那种容易产生重复、效率还低的方案对吧?

嵌套循环确实不是最优解,不仅时间复杂度是O(n²),还容易出现重复处理的问题。这里给你一个更高效的思路,用Map做临时存储,只需要遍历一次数组就能完成合并,完美解决你的痛点。

核心逻辑

用category和code的组合作为唯一标识键,把每个对象按这个键存入Map:

  • 如果键已经存在,就把当前对象的额外属性(比如NL、FR这类语言字段)合并到已有的对象里
  • 如果键不存在,就直接把当前对象存入Map
    最后把Map里的所有值提取成数组,就是你要的结果。

JavaScript 代码实现

// 输入数组
const input = [
  { "category": "Nace2008", "code": "01110", "NL": "Teelt van granen (m.u.v. rijst), peulgewassen en oliehoudende zaden" },
  { "category": "Nace2008", "code": "01110", "FR": "Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses" },
  { "category": "Nace2008", "code": "01120", "FR": "Culture du riz" },
  { "category": "Nace2008", "code": "01120", "NL": "Teelt van rijst" }
];

// 合并函数
const mergeMatchingObjects = (arr) => {
  const mergedMap = new Map();
  
  arr.forEach(item => {
    // 生成唯一标识键:category + code 组合
    const uniqueKey = `${item.category}-${item.code}`;
    // 拆分基础属性和语言属性
    const { category, code, ...languageProps } = item;
    
    if (mergedMap.has(uniqueKey)) {
      // 合并现有对象与当前的语言属性
      mergedMap.set(uniqueKey, { ...mergedMap.get(uniqueKey), ...languageProps });
    } else {
      // 新键,直接存入完整对象
      mergedMap.set(uniqueKey, { category, code, ...languageProps });
    }
  });
  
  // 将Map的值转换为数组返回
  return Array.from(mergedMap.values());
};

// 执行合并
const output = mergeMatchingObjects(input);
console.log(output);

最终输出

[
  {
    "category": "Nace2008",
    "code": "01110",
    "NL": "Teelt van granen (m.u.v. rijst), peulgewassen en oliehoudende zaden",
    "FR": "Culture de céréales (à l'exception du riz), de légumineuses et de graines oléagineuses"
  },
  {
    "category": "Nace2008",
    "code": "01120",
    "FR": "Culture du riz",
    "NL": "Teelt van rijst"
  }
]

这个方案的优势

  • 效率更高:只遍历一次数组,时间复杂度为O(n),数据量越大,和嵌套循环的差距越明显
  • 无重复问题:每个唯一组合只处理一次,不会出现重复合并的情况
  • 扩展性强:如果以后需要增加新的匹配条件,只需要修改唯一键的生成规则即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:17:27