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

Terraform中如何将两个等长列表转换为字典并去除重复项

核心注意点
  • 不要单独对键列表、值列表分别调用toset()做去重:Terraform的集合(set)是无序数据结构,转换后会彻底丢失两个列表原有的下标对应关系,完全无法保证键值配对正确。举个反例,转集合后keys可能排序为["Kil", "Rash", "Varsha"]、values可能排序为[1,5,4],最终会得到{"Kil":1, "Rash":5, "Varsha":4}这种完全错位的错误结果。
  • 正确的去重+转字典逻辑不需要提前转集合,Terraform构造map时遇到重复键会自动保留最后一次出现的对应值,刚好匹配去重需求。
实现代码

两种写法效果完全一致,都能得到正确结果:

  • 下标遍历写法(逻辑更直观):
locals {
  test_keys   = ["Rash", "Kil", "Varsha", "Varsha"]
  test_values = [1, 4, 5, 5]

  target_map = { for idx, key in local.test_keys : key => local.test_values[idx] }
}
  • 内置函数写法(更简洁):
locals {
  test_keys   = ["Rash", "Kil", "Varsha", "Varsha"]
  test_values = [1, 4, 5, 5]

  target_map = zipmap(local.test_keys, local.test_values)
}
结果验证

在Terraform工作目录执行terraform console,输入local.target_map即可得到符合预期的结果:

> local.target_map
{
  "Kil" = 4
  "Rash" = 1
  "Varsha" = 5
}

注:Terraform的Map类型输出时会自动按键名字典序排序,和输入时的键顺序无关,但所有键值的匹配关系完全和原列表的下标对应关系一致,不会出现配对错误。如果同一个键在列表中多次出现且对应值不同,最终结果会保留该键最后一次出现时对应的value。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:18:25