如何编写函数返回字典中对应列表元素数量最多的键?
解决字典中找对应列表元素最多的键的问题
先聊聊你现有代码里的几个小问题:
how_many函数直接依赖全局变量animals,而不是传入的dic参数,换个字典就没法用了;而且它只打印总数,没有返回值,导致biggest调用它时拿不到有效数据biggest里用range(len(animals))循环是错误的——字典不是有序序列,不能通过数字下标访问键值对,得直接遍历它的键或者键值对
接下来给你修正后的完整代码,先把how_many改得更实用,再完成biggest函数:
def how_many(dic): count = 0 # 遍历传入的字典参数,而非全局变量 for key in dic: if isinstance(dic[key], list): count += len(dic[key]) return count # 返回统计结果,而非直接打印 def biggest(dic): max_length = -1 max_key = None # 直接遍历字典的键值对,获取每个键和对应的列表 for key, lst in dic.items(): # 确保对应的值是列表,和how_many的判断逻辑保持一致 if isinstance(lst, list): current_len = len(lst) # 如果当前列表长度大于记录的最大值,就更新最大值和对应键 if current_len > max_length: max_length = current_len max_key = key return max_key # 测试示例 animals = { 'a': ['horse'], 'b': ['baboon'], 'c': ['giraffe','donkey']} print(biggest(animals)) # 输出结果:'c'
简单解释下biggest的逻辑:
- 先初始化
max_length为-1(因为列表长度最小是0,这样第一个列表肯定能触发更新),max_key为None - 逐个遍历字典的键值对,先确认值是列表(避免非列表类型干扰)
- 计算当前列表的长度,要是比之前记录的最大值大,就更新最大值和对应的键
- 最后返回那个对应最长列表的键
如果想复用how_many的逻辑其实没必要,因为how_many是统计全局总数,而我们这里只需要单个键对应的列表长度,直接用len(lst)效率更高~
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

