我想在 Terraform 中合并重复的键映射



local.tf

locals{
sample_map = [
{"aaa":"111"},
{"bbb":"222"},
{"aaa":"333"},
{"bbb":"444"},
]
}

我想将此示例映射的值合并为基于相同键的列表格式。 所以我想做的形式是这样的。

sample_map_result = {
"aaa": ["111","333"]
"bbb": ["222","444"]
}

提前感谢您的帮助。

我编写了这段代码,但我不知道下一步。

sample_map_result = flatten([
for mp in local.sample_map: flatten([
for k, v in mp: {

}
])
])

您的初始示例无效,因为实际上不可能使用此处所示的重复键构建映射。映射行为的基本组成部分是每个键只能存在一次。

最直接的答案是直接以您想要的形式写出地图,作为列表映射或集合映射:

sample_map_result = tomap({
aaa = toset(["111","333"])
bbb = toset(["222","444"])
})

如果将每个对作为单独的值是一个重要的要求,那么您需要决定其他方法来表示这些对。例如,您可以将源数据写入为一组元组:

locals {
sample_items = toset([
["aaa", "111"],
["bbb", "222"],
["aaa", "333"],
["bbb", "444"],
])
}

然后,您可以使用...分组模式使用for表达式将其投影到列表映射中:

locals {
result = tomap({
for pair in local.sample_items : pair[0] => pair[1]...
})
}

值表达式 (pair[1]) 后面的...符号告诉 Terraform 您打算按键表达式 (pair[0]的结果对值进行分组。

此常规模式适用于每对键和值具有一个元素的任何源集合。您只需要在=>符号之前和之后编写适当的表达式,即可告诉 Terraform 如何(分别)查找每个输入元素的键和值。

解决方案在哪里

from collections import defaultdict
sample_map_result = defaultdict(list)
for mp in local.sample_map:
for k, v in mp.items():
sample_map_result[k].append(v)
sample_map_result = dict(sample_map_result)

相关内容

  • 没有找到相关文章