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

Terraform中按指定字段去重对象列表并拼接name字段的方法

按security_group_id和tcp_port分组并拼接name字段的实现方法

我有如下格式的对象列表:

input = [ 
    { "name": "A", "security_group_id": "sg-123456", "tcp_port": 3306 },
    { "name": "B", "security_group_id": "sg-123456", "tcp_port": 3306 },
    { "name": "C", "security_group_id": "sg-123456", "tcp_port": 443 },
    { "name": "D", "security_group_id": "sg-567890", "tcp_port": 22 } 
]

需要按security_group_id和tcp_port对列表元素去重,同时将对应的name字段拼接在一起(类似MySQL的GROUP_CONCAT),期望输出如下:

output = [ 
    { "name": "A,B", "security_group_id": "sg-123456", "tcp_port": 3306 },
    { "name": "C",   "security_group_id": "sg-123456", "tcp_port": 443 },
    { "name": "D",   "security_group_id": "sg-567890", "tcp_port": 22 } 
]

由于对象本身唯一,无法用distinct函数,请问能否通过遍历对象,当其他字段已存在时拼接name字段来实现?


当然可以通过遍历+字典分组的方式实现,核心思路是用**security_group_id和tcp_port的组合作为唯一键**,把同组的name字段拼接起来,具体步骤和代码示例如下:

实现步骤

  • 初始化一个空字典,用来缓存分组后的结果,键是(security_group_id, tcp_port)的元组,值是对应的对象
  • 遍历输入列表中的每个对象:
    1. 提取当前对象的security_group_id和tcp_port组成组合键
    2. 如果组合键已在字典中,就将当前对象的name以逗号分隔的形式拼接到已有对象的name字段后
    3. 如果组合键不在字典中,就将当前对象的副本存入字典(避免修改原输入对象)
  • 最后将字典的所有值转换为列表,就是最终的输出结果

Python代码示例

input_list = [ 
    { "name": "A", "security_group_id": "sg-123456", "tcp_port": 3306 },
    { "name": "B", "security_group_id": "sg-123456", "tcp_port": 3306 },
    { "name": "C", "security_group_id": "sg-123456", "tcp_port": 443 },
    { "name": "D", "security_group_id": "sg-567890", "tcp_port": 22 } 
]

grouped = {}
for item in input_list:
    # 生成组合键
    key = (item["security_group_id"], item["tcp_port"])
    if key in grouped:
        # 拼接name字段
        grouped[key]["name"] += f",{item['name']}"
    else:
        # 复制对象存入字典,避免修改原数据
        grouped[key] = item.copy()

# 转换为列表得到结果
output_list = list(grouped.values())
print(output_list)

运行后输出的结果和期望完全一致。这种方法时间复杂度是O(n),仅需遍历一次即可完成分组,效率很高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:30:49