这是一个员工工资表问题,给出的参考答案存在一定的问题,我们分析一下。
类型:Python 组合数据类型
参照代码模板完善代码,实现下述功能。
在代码模板里定义了一个字典,key是员工的姓名,value是由部门和工资构成的列表,用逗号隔开。示例如下:
members = {'张三':['人力部',5500],
'李四':['后勤部',4500],
...(略)
将姓名和工资显示在屏幕上,示例如下:
张三的工资是:5500,部门是人力部
李四的工资是:4500,部门是后勤部
...略)
工资最高的部门是:开发部,该部门工资是:8500
示例1:
输入:无
输出:"
张三的工资是:5500, 部门是人力部
李四的工资是:4500, 部门是后勤部
王三的工资是:6500, 部门是市场部
赵六的工资是:8500, 部门是开发部
工资最高的部门是:开发部,该部门工资是:8500
"
题目要求需要把以下代码补充完整:
members = {'张三':['人力部',5500],
'李四':['后勤部',4500],
'王三':['市场部',6500],
'赵六':['开发部',8500]
}
sal_dep = {}
for key in members:
print('{}的工资是:{}, 部门是{}'.format(_________))
…
print('工资最高的部门是:{},该部门工资是:{}'.format(max_name,max_val))
# -*- coding:utf-8 -*-
'''
This is a python123.io file.
'''
members = {'张三':['人力部',5500],
'李四':['后勤部',4500],
'王三':['市场部',6500],
'赵六':['开发部',8500]
}
sal_dep = {}
for key in members:
print('{}的工资是:{}, 部门是{}'.format(key, members[key][1], members[key][0]))
sal_dep[members[key][1]] = members[key][0]
max_val = max(sal_dep)
max_name = sal_dep[max_val]
print('工资最高的部门是:{},该部门工资是:{}'.format(max_name,max_val))
1. 通过遍历字典来获取各部门的工资,通过生成一个以部门工资为键,以部门为键值的字典,再通过max直接得到工资最高的键,再获得其键值,就得到了这个工资对应的部门。
2. 该代码存在以下缺点:官方的解题思路比较简单,没有考虑到如果两个不同部门的工资一样,这样就不能把工资作为键了。所以把数字作为键名的风险是很大的,因为字典不允许有重复键名的现象,当两个部门工资一样时,就可能出现问题。
改进的思路是把部门作为键名,部门工资作为键值,这样可以最大限度地减少键名重合。同时,在获取部门最高的工资时,我们利用lambda函数,按照字典键值为key获取最大值就可以了。修改后的代码如下:
members = {'张三':['人力部',5500],
'李四':['后勤部',4500],
'王三':['市场部',6500],
'赵六':['开发部',8500]
}
sal_dep = {}
for key in members:
print('{}的工资是:{}, 部门是{}'.format(key, members[key][1], members[key][0]))
sal_dep[members[key][0]] = members[key][1]
max_val = max(sal_dep,key = lambda x:sal_dep[x])
max_name = sal_dep[max_val]
print('工资最高的部门是:{},该部门工资是:{}'.format(max_name,max_val))