如何解决根据元素中的键列表创建地图
我正在尝试将物品列表转换为地图。 元素包含一个名为标签的键,该键包含多个以','
分隔的标签密钥应与包含标签的所有节点匹配。
variable "list" {
type = list(map(string))
default = [
{ a : "a",tags : "k1" },{ a : "b",{ a : "c",tags : "k1,k2" },{ a : "d",tags : "k2" },{ a : "e",tags : "k2" }
]
}
// Output wanted
// {
// "k1" : [{a: a},{a: b},{a: c}],// "k2" : [{a: d},{a: e},{a: c}]
// }
我尝试过:
[for n in var.list: {for t in split(",",n["tags"]): t => n}]
[
{
"k1" = {a: a}
},{
"k1" = {a: b}
},{
"k1" = {a: c},"k2" = {a: c}
},{
"k2" = {a: d}
},{
"k2" = {a: e}
},]
但是在那之后我不知道如何合并它。
解决方法
这有点棘手。我使用了两个辅助数据类型,helper_list
和helper_map
。第一个检查k1
,k2
中存在哪些键。第二
创建具有单个值的列表。 final_map
将helper_map
转换为所需的地图:
locals {
helper_list = distinct(flatten(
[for n in var.list: [for t in split(",",n["tags"]): t]]))
helper_map = flatten([
for k in local.helper_list:
[
for item in var.list:
{"${k}" = {a = item["a"]}} if length(regexall(k,item["tags"])) > 0
]
])
final_map = {for item in local.helper_map: keys(item)[0] => values(item)[0]...}
}
output "test1" {
value = local.final_map
}
结果:
est1 = {
"k1" = [
{
"a" = "a"
},{
"a" = "b"
},{
"a" = "c"
},]
"k2" = [
{
"a" = "c"
},{
"a" = "d"
},{
"a" = "e"
},]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。