Python如何访问字典嵌套列表内元组值 返回最高重复字符单词
问题根源
你的代码返回错误结果,核心是两处逻辑错误:
- 遍历字典
outcome取最大值时,迭代得到的x是字典的键(也就是单词字符串本身),x[1]取的是单词的第2个字符,本质是按字符ASCII码大小排序,完全没有用到你之前统计的字符计数。所有测试单词的第二个字符里example的xASCII码值最高,所以才会被选中,和你推测的原因一致。 - 你存入
outcome的值是每个单词所有字符的(字符, 计数)元组列表,没有提前提取出每个单词对应的「单字符最高重复次数」这个核心比较指标,哪怕调整key的写法,也拿不到正确的比较值。
修正方案
不需要额外存所有字符的计数列表,对每个单词直接计算单字符最高出现频次,再以这个频次为key取最大值即可,写法更简洁:
def most_repeating_word(ls): word_list = ls.split() # 定义比较规则:输入单词,返回该单词里单字符的最高重复次数 def get_max_count(word): return max(word.count(char) for char in set(word)) return max(word_list, key=get_max_count) # 测试 print(most_repeating_word('this is an elementary test example')) # 输出:elementary
如果你想保留原来用字典存统计结果的写法,只需要改两处逻辑:一是存值的时候存每个单词的最高重复次数,二是取max的时候正确读取字典里存的计数值:
def most_repeating_word(ls): listed = ls.split() outcome = {} for word in listed: char_count = [] # 用set直接对单词字符去重,比手动维护去重列表效率更高 for char in set(word): char_count.append(word.count(char)) # 直接存当前单词的最高单字重复次数,不需要存所有字符的计数元组 outcome[word] = max(char_count) # 取max时,key要从outcome里取对应单词的计数值做比较 return max(outcome, key = lambda x: outcome[x]) print(most_repeating_word('this is an elementary test example')) # 输出:elementary
内容的提问来源于stack exchange,提问作者user19382165
相关产品推荐
相关产品推荐

