Python字典取最高频率字符时,如何优先选字母序最小的键?
问题解决
你需要修改max函数的key参数,让它在频率相同时优先选择字母序更小的字符。具体来说,把key设置为一个包含两个元素的元组:第一个元素是字符频率(保证频率高的优先),第二个元素是字符ASCII码的负值(让字母序更小的字符拥有更大的key值,从而被max选中)。
修改后的代码如下:
final_dict = {} for idx, counts in letter_positions.items(): # 先按频率降序排序,频率相同时按字母序升序(通过负ASCII码实现) most_popular = max(counts.items(), key=lambda v: (v[1], -ord(v[0]))) final_dict[idx] = most_popular[0]
原理说明
- 当比较两个字符元组时,
max会先对比元组的第一个元素(频率),频率更高的元组会被优先选中; - 若频率相同,则对比元组的第二个元素(负的ASCII码):字母序越小的字符,其ASCII码值越小,对应的负值就越大,因此会被
max选中。比如'r'的ASCII码是114,负值为-114;'y'的ASCII码是121,负值为-121,-114 > -121,所以('r', 2)会被max优先选中。
另外注意:你原代码中most_popular[0][0]是错误的,因为counts.items()返回的是形如('y', 2)的元组,直接取most_popular[0]就能得到目标字符。
内容的提问来源于stack exchange,提问作者terrier99uk
相关产品推荐
相关产品推荐

