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

如何用jq惯用方式按值聚合对象键 实现键值翻转分组

推荐方案

优先推荐优化后的 reduce 写法,逻辑直白,符合jq社区惯用写法,同时兼顾效率和可读性:

reduce to_entries[] as $item ({};
  .[$item.value] = (.[$item.value] // []) + [$item.key]
)

方案说明

  • 首先用 to_entries 把原始对象转换为 {key: 人员名, value: 部门} 的结构数组
  • 用 reduce 遍历所有条目,初始化空对象作为结果容器
  • 遍历过程中直接把当前人员名追加到对应部门的数组中:如果部门键不存在,// [] 会先初始化为空数组,再拼接当前人员名
  • 没有多余的中间结构转换,也避免了之前方案中用 * 运算符合并对象的冗余逻辑,可读性提升非常明显

如果你偏好分组的写法,也可以优化你提到的方案1,简化为更紧凑的版本:

to_entries | group_by(.value) | from_entries(map({key: .[0].value, value: map(.key)}))

两种方案的选型建议

  • 数据量较小时两种写法差异可忽略,优先选更短的reduce版本
  • 数据量极大时,reduce版本性能稍好,因为不需要额外的分组和数组映射操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:30:00