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

PowerShell嵌套哈希表访问报错问题咨询(附Python实现示例)

解决PowerShell嵌套哈希表的遍历问题

嘿,我来帮你搞定这个问题!你遇到的报错是因为PowerShell遍历哈希表的默认行为和Python不一样:在Python里直接遍历字典会拿到键名,但PowerShell里直接foreach ($entry in $entries)时,$entry是DictionaryEntry类型的键值对对象,不是单纯的键名,所以用$entries[$entry]就会出错。

下面给你几种正确实现需求的方法,都能输出1和2:

方法1:遍历哈希表的键集合

这种写法最贴近你原来的Python思路,明确获取所有键名再取值:

$entries = @{ one = @{ id = "1"; text = "ok" }; two = @{ id = "2"; text = "no" } }
foreach ($key in $entries.Keys) {
    Write-Host $entries[$key]['id']
}

这里$entries.Keys会返回哈希表的所有键(one、two),和Python遍历字典的默认行为一致。

方法2:遍历键值对对象(更PowerShell风格)

通过GetEnumerator()获取哈希表的键值对枚举器,直接访问内层哈希表的属性:

$entries = @{ one = @{ id = "1"; text = "ok" }; two = @{ id = "2"; text = "no" } }
foreach ($entry in $entries.GetEnumerator()) {
    # 用点语法访问哈希表的键,比括号更简洁
    Write-Host $entry.Value.id
}

$entry.Value就是每个内层的哈希表,PowerShell支持用点.直接访问哈希表的键(只要键名符合标识符规则),写法更清爽。

方法3:用管道处理(最简洁的PowerShell写法)

利用PowerShell的管道特性,直接遍历所有内层哈希表并输出id:

$entries = @{ one = @{ id = "1"; text = "ok" }; two = @{ id = "2"; text = "no" } }
$entries.Values | ForEach-Object { Write-Host $_.id }

$entries.Values直接返回所有内层哈希表,通过ForEach-Object逐个处理,$_代表当前管道对象,同样用点语法取id。

这三种方法都能实现你想要的效果,输出结果和Python代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:02:43