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

Terraform中如何对Map内列表嵌套for循环转换数据结构

Terraform Map转列表对象的实现方案

需求回顾

现有Map类型的本地变量old_local,每个键对应一个权限列表:

old_local = {
  "ReaderAVD" = [
    "Reader",
    "DesktopVirtualizationUser",
    "VirtualMachineUserLogin"
  ]       
  "OwnerAVD" = [
    "Owner",
    "TagContributor",
    "DesktopVirtualizationUser",
    "VirtualMachineUserLogin"
  ]
}

需要转换为列表结构new_local,每个父键对应列表中的单个权限生成独立对象,每个对象包含parent(父键)和child(单个权限的列表)。

正确实现代码

new_local = flatten([
  for parent_key, roles in old_local : [
    for role in roles : {
      parent = parent_key
      child  = [role]
    }
  ]
])

代码解释

  1. 外层循环:遍历old_local的键值对,parent_key取Map的键(如"ReaderAVD"),roles取对应的值(权限列表)。
  2. 内层循环:针对当前parent_key对应的roles列表,逐个遍历每个权限,生成包含parent和child的对象——注意child要求是列表格式,所以用[role]将单个权限包装成列表。
  3. flatten函数:将内层循环生成的嵌套列表打平为一维列表,得到目标结构。

原代码问题分析

你之前的代码内层循环错误地再次遍历了整个原Map,导致每个父键与所有权限列表进行全组合,而非仅遍历当前父键对应的权限列表,这会生成大量冗余的错误组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:11