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

如何在PowerShell中实现类似Python Counter或defaultdict的统计功能?

在PowerShell中统计集合属性出现次数的标准方法

方法1:使用内置的Group-Object命令(推荐)

这是PowerShell原生的标准解决方案,功能对标Python的Counter,专门用于分组统计,无需额外依赖。

基础用法:统计属性出现次数并输出结构化结果

# 示例:模拟包含属性的对象集合
$sampleItems = @(
    [PSCustomObject]@{ID = 1; Category = "Books"},
    [PSCustomObject]@{ID = 2; Category = "Electronics"},
    [PSCustomObject]@{ID = 3; Category = "Books"},
    [PSCustomObject]@{ID = 4; Category = "Books"},
    [PSCustomObject]@{ID = 5; Category = "Electronics"},
    [PSCustomObject]@{ID = 6; Category = "Clothing"}
)

# 按Category属性分组并统计次数
$sampleItems | Group-Object -Property Category | Select-Object Name, Count

输出结果:

Name        Count
----        -----
Books           3
Electronics     2
Clothing        1

进阶:直接生成哈希表(类似字典)

如果需要像字典一样直接通过键访问计数,可以添加-AsHashTable和-AsString参数:

$categoryCounts = $sampleItems | Group-Object -Property Category -AsHashTable -AsString

# 直接访问指定属性值的计数
$categoryCounts["Books"]  # 输出:3
$categoryCounts["Electronics"]  # 输出:2

方法2:手动使用哈希表实现(自定义场景)

如果需要更灵活的统计逻辑(比如自定义计数规则),可以手动用哈希表模拟类似defaultdict的行为:

$counts = @{}
foreach ($item in $sampleItems) {
    $category = $item.Category
    # 空合并运算符处理键不存在的情况:若键不存在则初始化为0,再加1
    $counts[$category] = ($counts[$category] ?? 0) + 1
}

# 遍历输出所有计数
$counts.GetEnumerator() | Sort-Object Name

这种方式适合需要在计数过程中加入额外判断的场景,输出结果和Group-Object的结构化输出一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:01:16