Terraform合并重复键映射:将同键值转为列表格式
合并Terraform中重复键的映射为列表格式
要实现将包含重复键的单键映射列表合并为「键对应值列表」的映射,可以通过提取键值对+分组聚合的方式完成,以下是具体实现:
完整解决方案
locals { sample_map = [ {"aaa":"111"}, {"bbb":"222"}, {"aaa":"333"}, {"bbb":"444"}, ] sample_map_result = { for group in groupby( flatten([ for mp in local.sample_map : [ for k, v in mp : { key = k, value = v } ] ]), "key" ) : group.key => [for item in group.values : item.value] } }
分步解释
提取统一格式的键值对
先用嵌套for循环遍历原始列表中的每个单键映射,将每个键值对转换为{key = "xxx", value = "yyy"}的结构化对象,再通过flatten将嵌套列表拍平,得到所有键值对的扁平列表:flatten([ for mp in local.sample_map : [ for k, v in mp : { key = k, value = v } ] ])这一步会输出:
[ {"key":"aaa", "value":"111"}, {"key":"bbb", "value":"222"}, {"key":"aaa", "value":"333"}, {"key":"bbb", "value":"444"}, ]按键分组并生成目标映射
使用groupby函数按key字段分组,得到每个键对应的所有值对象,再通过for表达式遍历分组结果,将分组的key作为目标映射的键,将分组中所有value字段提取为列表作为对应值。
问题修正说明
你之前的代码缺失了键值对的结构化定义,导致后续无法进行分组聚合。补充{ key = k, value = v }的结构后,就能通过groupby顺利完成重复键的值合并。
内容的提问来源于stack exchange,提问作者fxxking terraform
相关产品推荐
相关产品推荐

