其实可以稍微简单一点的:
def main(obj):
if type(obj) != dict:
return '参数必须是字典。'
else:
values = list(obj.values())
value_data_types = [type(val) for val in values]
if len(set(value_data_types)) != 1:
return '字典的值必须是同一种类型。'
else:
max_one = [key for key, val in zip(list(obj.keys()),list(obj.values())) if val == max(values)][0]
return max_one
大致思路:
(1)使用type()方法检验obj是否为字典;
(2)使用dict.values()方法提取字典所有的值并创建列表,命名为values;
(3)使用type()方法获取列表values中的值(都继承自字典)的数据类型;
(4)结合列表解析式将获取到的数据类型写入一个新列表,命名为value_data_types;
(5)对value_data_types使用set()方法创建集合,意图在于消除记录中重复的数据类型,以便知晓一共有几种数据;
(6)对列表values使用max()方法,以获取字典中最大的值;
(7)结合列表解析式提取最大值对应的键。
(全部返回值、输出以及部分条件判断已经回避,此思路前提是【obj是字典,并且值的类型都一样】)
另外,此题目好像回避了obj为空字典的情形,或是并未要求函数做出正确判断?
对题目的优化方案:
判定obj是字典后,应当判断obj是否为空(即obj是否为空字典{})。
优化方案如下所示。
def main(obj):
if type(obj) != dict:
return '参数必须是字典。'
else:
if obj == {}:
return '字典不能为空。'
else:
values = list(obj.values())
value_data_types = [type(val) for val in values]
if len(set(value_data_types)) != 1:
return '字典的值必须是同一种类型。'
else:
return '字典中,值最大的键值对的键为%s。' % max(obj, key=lambda x: obj[x])
注:
(1)此优化方案的函数返回值与题意部分不符,若答题请勿使用。
(2)此优化方案仅作知识上的补充和参考。