本文介绍使用 Python 的 collections.Counter 高效统计字典列表中指定字段(如 'name')的频次,并提供简洁、可读性强的实现方案及常见注意事项。
本文介绍使用 python 的 `collections.counter` 高效统计字典列表中指定字段(如 `'name'`)的频次,并提供简洁、可读性强的实现方案及常见注意事项。
在处理由字典组成的列表时,常需按某一字段(例如 'name')进行频次统计。原始方法如用 defaultdict(list) 存储重复项再手动计数,不仅冗余,还易出错(如误用 sum(x) 对字符串求和)。更优雅、专业的做法是直接使用 collections.Counter —— 它专为计数设计,底层基于哈希表,时间复杂度为 O(n),且接口简洁。
以下为推荐实现:
from collections import Counter
list1 = [
{'state': 'active', 'name': 'Name1'},
{'state': 'active', 'name': 'Name2'},
{'state': 'inactive', 'name': 'Name3'},
{'state': 'active', 'name': 'Name2'},
{'state': 'active', 'name': 'Name1'},
{'state': 'inactive', 'name': 'Name3'},
{'state': 'inactive', 'name': 'Name4'},
{'state': 'active', 'name': 'Name1'},
{'state': 'inactive', 'name': 'Name2'},
]
# 提取所有 'name' 值并统计频次
counts = Counter(item['name'] for item in list1)
# 按需输出结果
for name, count in counts.items():
print(f"{count} counts for {name}")
运行后将输出:
3 counts for Name1
3 counts for Name2
2 counts for Name3
1 counts for Name4
✅ 优势说明 :
SoundView
专为跨境电商设计的AI视频翻译、配音和创作工具
下载
Counter 自动处理键初始化与累加,无需手动判断是否存在;
支持 .most_common(n) 快速获取 Top-N 频次项(如 counts.most_common(2));
返回对象本身是 dict 的子类,可直接用于字典操作(如 counts['Name5'] 默认返回 0,安全访问)。
⚠️ 注意事项 :
确保所有字典都包含目标键(如 'name'),否则会触发 KeyError。若存在缺失情况,建议预处理或改用 item.get('name', 'UNKNOWN') 提供默认值;
若需按原始顺序输出(而非 Counter 默认的高频优先),应显式遍历原始唯一键集合(如 dict.fromkeys(item['name'] for item in list1))或使用 sorted(counts.items());
避免对非数值类型(如字符串)调用 sum()——这是初学者常见误区,sum() 仅适用于可迭代的数值序列。
综上,Counter 是解决此类频次统计问题的标准、高效且可维护的工具,应作为首选方案。
《异环》是Hotta Studio自主研发的超自然都市开放世界RPG。就在最近1.1版本即将上线,那么有不少小伙伴好奇1.1版本能获得多少环石和方斯,下面就来告诉大家1.1版本环石方斯统计。 异环1.1版本环石方斯统计 第一页为环石统计,第二页为方斯统计 标注约的是暂未上线和公布的活动内容,这里仅根据已有活动参考推测数量,请以上线后数量为准 暂时仅统计游戏内内容,外部各类签到暂不统计 部分方斯获取...
2026-06-05 · 网游攻略 · 101855
Word中确认含空格字符总数需用原生统计功能:状态栏点击“字数”、审阅选项卡点“字数统计”或快捷键Ctrl+Shift+G(Win)/Cmd+Shift+G(Mac),三者均在弹窗中明确显示“字符数(计空格)”数值。 你需要在Word里快速确认文档总字数、字符总数,尤其是包含空格在内的完整字符数,比如投稿要求“不超过5000字符(含空格)”或校对时需精确到每个空白位——这些数值不能靠目测,必须调用...
2026-05-29 · 软件教程 · 71220
原神卡齐娜养成需要什么材料,下文为大家统计原神卡齐娜养成材料,包含天赋1~8级材料消耗、角色升级到80级消耗及角色升级到90级消耗。有需要的玩家们可以参考下方材料提前进行收集。 原神卡齐娜养成材料统计: 角色升级到90级消耗: 209.253万摩拉、419个大英雄的经验 坚牢黄玉[1碎屑9断片9块6整] 卫从的木哨18个 战士的铁哨30个 龙冠武士的金哨36个 过熟的火榴果46个、青蜜莓168个。...
2026-05-18 · 手游攻略 · 107729
需使用WizTree的“按扩展名分类”功能:一、完成目标分区扫描;二、通过“查看→按扩展名分类”切换视图;三、点击“大小”列降序排列并用过滤器筛选;四、通过“文件→Export to CSV”导出统计结果;五、右键扩展名条目可批量管理对应文件。 如果您希望快速了解硬盘中各类文件格式的总体空间占用分布,例如视频、镜像、日志或临时文件各自占用了多少磁盘空间,则需使用WizTree的“按扩展名分类”功能...
2026-05-15 · 软件教程 · 101448
pytest.mark 必须作为装饰器直接作用于测试函数或类,不可写在函数外部;可叠加多个标记,执行时用 -m "mark1 and mark2" 等布尔表达式筛选;未注册标记会触发警告,需在 pytest.ini 或 pyproject.toml 中声明以避免。 pytest.mark 能不能直接用在函数外面 不能。所有 pytest.mark 必须装饰在测试函数或类上,写在函数定义之外会报 S...
yield from 在树遍历中省去了手动展开子生成器的繁琐与风险,自动处理委托调用、异常传播、StopIteration 捕获及协程方法转发,确保扁平化输出和行为一致性。 yield from 在树遍历中到底省了什么 直接说结论:yield from 不是语法糖,它把递归生成器的“委托调用”从手动循环 + yield 拆解成一条语句,避免了中间迭代器被提前耗尽、异常传播断裂、或 StopIter...
Python函数内同名变量报UnboundLocalError,因编译期将赋值变量标记为局部,读取在赋值前则出错;global用于模块级变量,nonlocal用于最近外层函数变量,二者不可混用且需提前声明。 为什么在函数里修改同名变量会报 UnboundLocalError Python 在编译函数时,只要看到某个变量在函数体内有赋值操作(哪怕只在 if 分支里),就会把它标记为局部变量。之后如果...
Python内存泄漏主因是对象被隐性持有而非未调gc.collect(),可用objgraph.show_growth()定位异常增长类型,再用gc.get_referrers()逆向追踪强引用源,并结合RSS监控与gc调试确认真实泄漏。 Python 脚本内存持续上涨,大概率不是“没调 gc.collect()”,而是对象根本没被识别为可回收——比如被全局容器悄悄持有、含 __del__ 的循环...