Monica_MTF 2023-01-28 21:36 采纳率: 73.9%
浏览 27
已结题

接收参数obj,判断字典里值的类型

函数main()接收一个参数obj,
如果obj不是字典 就返回字符串'参数必须是字典。',
如果obj是字典 但是所有元素“值”的类型不一样 就返回字符串'字典的值必须是同一种类型。',
如果obj是字典 并且所有元素“值”的类型一样 就返回“值”最大的元素的“键”。
例如,main({'a':3,b:5,'c':9})返回'c'。

这个确实不会,代码按照题意乱写的。
题目要求检查“值”的类型……感觉会用到字典的性质。

def main(obj):
    if obj not dict:
        return('参数必须是字典。')
    elif obj in dict:
        return('字典的值必须是同一种类型。')
    else:
        return key(max(value))

肯定是不对的,就没有运行。

  • 写回答

2条回答 默认 最新

  • starlight_2007 2023-01-28 23:52
    关注

    其实可以稍微简单一点的:

    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)此优化方案仅作知识上的补充和参考。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 创建了问题 1月28日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 如何将下列的“无限压缩存储器”设计出来
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口