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

Python字典中特定键的出现次数统计问题及优化方案

解决Python中统计重复键对应条目次数的问题

首先得指出你踩的第一个坑:Python字典的键是唯一的,你写的那个包含重复键的字典,在创建的时候会自动覆盖掉之前的同键值对。比如你定义的count字典,实际最终的样子是:

{'John': 2, 'Sam': 2, 'Brian': 1, 'Henry': 2}

所有重复的Brian、Sam、John都只保留了最后一次的赋值,这就是为什么你统计不出正确结果的原因。

要实现你想要的需求(输入"Brian"返回4,输入"Sam"返回2),我们需要先把原始的键值对数据用列表来存储(因为列表允许重复元素),然后再做统计。这里给你两种常用的实现方式:

方法一:手动循环计数

这种方式直观易懂,适合刚入门的同学:

# 先把原始数据存成列表的元组形式,保留所有条目
entries = [('John', 2), ('Sam', 1), ('Brian', 2), ('Brian', 2), ('Brian', 1), ('Sam', 2), ('John', 2), ('Henry', 2), ('Brian', 1)]

def get_name_count(target_name):
    count = 0
    for name, _ in entries:  # 遍历每个条目,只关心名字部分
        if name == target_name:
            count += 1
    return count

# 测试一下
print(get_name_count("Brian"))  # 输出4
print(get_name_count("Sam"))    # 输出2

方法二:用collections.Counter快速统计

如果想更简洁高效,可以用Python标准库中的Counter,它专门用来做频率统计:

from collections import Counter

entries = [('John', 2), ('Sam', 1), ('Brian', 2), ('Brian', 2), ('Brian', 1), ('Sam', 2), ('John', 2), ('Henry', 2), ('Brian', 1)]

# 先提取所有名字,再统计每个名字的出现次数
name_counter = Counter(name for name, _ in entries)

# 直接通过键获取次数
print(name_counter["Brian"])  # 输出4
print(name_counter["Sam"])    # 输出2

这两种方法都能完美满足你的需求,第二种更适合处理大量数据的场景,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:00:11