Python中统计员工字典数据库内各部门人数的问题
解决Python统计部门人数的问题
别担心,刚入门Python遇到这类问题太正常了!我帮你拆解代码里的问题,再给你正确的实现思路和代码~
你的代码里的核心问题
先看看你代码里几个关键的错误点:
- 员工数据定义错误:你现在把几个字典直接写在一起,Python无法识别这是一个员工集合,应该把所有员工字典放进列表(用
[]包裹),这样才能遍历所有员工信息。 - 遍历逻辑错误:就算数据定义正确,你写的
for item in employees之后又用dic = employees[item]是错误的——如果employees是列表,item本身就是每个员工的字典,不需要再通过索引取值。 - 统计逻辑完全偏离:你写的
dic['dpt'[0]]==dic['dpt'[1]]完全不是统计部门人数的逻辑:'dpt'[0]是字符'd','dpt'[1]是字符'p',这行代码是在比较员工字典中键为'd'和'p'的值,和部门统计毫无关系。 - 未初始化变量:你用到的
duplicate变量没有提前定义,就算逻辑正确也会直接报错。
正确的实现代码
下面是能实现「统计各部门人数」需求的代码,我加了详细注释:
def main(): # 正确定义员工列表:把每个员工字典放进[]里,组成可遍历的集合 employees = [ {'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 'programmer', 'salary': '75'}, {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 'salary': '80'}, {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 'accountant', 'salary': '85'} ] # 创建一个空字典,用来存储各部门的人数,键是部门名称,值是人数 department_counts = {} # 遍历每个员工字典 for emp in employees: # 获取当前员工的部门 dept = emp['dpt'] # 如果部门已经在统计字典里,人数+1;否则初始化为1 if dept in department_counts: department_counts[dept] += 1 else: department_counts[dept] = 1 # 遍历统计结果,输出每个部门的人数 for dept, count in department_counts.items(): print(f"{dept}-{count}") # 调用main函数执行 main()
代码运行结果
运行这段代码后,你会得到想要的输出:
tech-2 accounting-1
另外,如果你想更简洁地实现统计,还可以用Python标准库的collections.Counter,一行就能完成统计:
from collections import Counter def main(): employees = [ {'name': 'John', 'empID': '102', 'dpt': 'tech', 'title': 'programmer', 'salary': '75'}, {'name': 'Jane', 'empID': '202', 'dpt': 'tech', 'title': 'programmer', 'salary': '80'}, {'name': 'Joe', 'empID': '303', 'dpt': 'accounting', 'title': 'accountant', 'salary': '85'} ] # 用Counter直接统计所有部门的出现次数 dept_counts = Counter(emp['dpt'] for emp in employees) for dept, count in dept_counts.items(): print(f"{dept}-{count}") main()
这个方法更Pythonic,适合之后熟悉了基础语法后使用~
内容的提问来源于stack exchange,提问作者Codr4Life
相关产品推荐
相关产品推荐

