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
相关产品推荐
相关产品推荐

