Python实现得克萨斯州指定时段Top5婴儿姓名统计遇计数难题
嘿,我看你在开发德州婴儿姓名统计程序时,卡在了计数和Top5排名的环节,这就帮你搞定~
解决德州婴儿姓名Top5统计的计数问题
首先,先梳理下你的需求核心:筛选指定年份区间、指定性别的婴儿姓名,统计每个姓名的总使用次数,最终输出Top5热门姓名。你的现有代码已经完成了年份筛选的第一步,接下来我们完善计数和排序的部分:
完整代码实现
这里我假设你的file_data是每条记录为列表格式(比如从CSV读取的行数据),如果是字典格式我也会给出调整方案:
from collections import defaultdict def count_names(file_data, begin, end, sex): # 初始化计数字典,自动处理新姓名的初始计数为0 name_total_counts = defaultdict(int) # 生成目标年份的字符串列表,匹配数据中的年份格式 target_years = [str(year) for year in range(begin, end + 1)] # 遍历所有数据记录 for record in file_data: # 提取当前记录的年份、性别、姓名、计数(请根据你的实际数据结构调整下标!) record_year = record[5:9] record_sex = record[1] # 假设性别在索引1的位置,你需要改成自己数据的对应下标 record_name = record[3] # 假设姓名在索引3的位置 record_count = int(record[4]) # 假设计数在索引4的位置,转成整数 # 筛选符合年份和性别的记录 if record_year in target_years and record_sex == sex: # 累加姓名的总计数 name_total_counts[record_name] += record_count # 按总计数降序排序,取前5个 sorted_top_names = sorted( name_total_counts.items(), key=lambda x: x[1], reverse=True )[:5] # 格式化结果,方便展示 formatted_top = [ f"第{rank+1}名:{name}(总使用次数:{count})" for rank, (name, count) in enumerate(sorted_top_names) ] return formatted_top
关键调整说明
- 用
defaultdict简化计数:相比普通字典,它不需要手动判断姓名是否已存在,直接累加即可,避免KeyError - 明确数据字段下标:你需要根据自己的
file_data结构,调整record_sex、record_name、record_count的索引值。如果你的数据已经转成了字典(比如用csv.DictReader读取),可以把这部分改成字典键取值,比如:# 字典格式数据的调整示例 record_year = str(record["Year"]) record_sex = record["Sex"] record_name = record["Name"] record_count = int(record["Count"]) - 排序取Top5:用
sorted函数结合reverse=True实现降序排序,最后用切片[:5]截取前5个结果
使用示例
假设你已经读取了德州婴儿姓名的数据集,调用函数并输出结果:
# 示例:获取2010-2020年德州男婴的Top5姓名 top_boys = count_names(file_data, 2010, 2020, "M") print("2010-2020年德州最热门的5个男婴姓名:") for item in top_boys: print(item)
内容的提问来源于stack exchange,提问作者Abir Chaudhuri
相关产品推荐
相关产品推荐

