Python函数式编程实现按首字母分组单词 合并重复键值为列表
Python函数式实现单词首字母索引的解决方法
核心问题原因
你原有代码的问题在于map会为每个单词生成独立的(首字母, [单词])元组,dict构造器遇到重复键时会直接用后出现的键值对覆盖前序值,因此同首字母的单词无法合并。
函数式实现方案
方案1:使用functools.reduce实现(推荐,时间复杂度O(n))
reduce是函数式编程中用于聚合结果的标准方法,不需要提前排序,直接遍历一次即可完成合并:
from functools import reduce values = ["Cat" , "Mat" , "Jack", "Cord"] index = reduce( # 每次迭代返回新的字典,避免修改原累积对象 lambda accumulator, word: { **accumulator, word[0]: [*accumulator.get(word[0], []), word] }, values, # 待遍历的原始列表 {} # 初始累积空字典 )
运行后得到的index完全符合预期输出。
方案2:使用itertools.groupby实现
如果你更习惯分组逻辑,可以用groupby实现,注意groupby只能合并连续的同组元素,因此需要先按首字母对列表排序:
from itertools import groupby values = ["Cat" , "Mat" , "Jack", "Cord"] # 按首字母排序 sorted_words = sorted(values, key=lambda x: x[0]) # 分组构造字典 index = { first_char: list(word_group) for first_char, word_group in groupby(sorted_words, key=lambda x: x[0]) }
内容的提问来源于stack exchange,提问作者Scb
相关产品推荐
相关产品推荐

