如何将小写字符串列表按首字符分组生成指定格式字典?
问题需求
给定全小写字符串列表mystrings,需创建并返回一个字典:
- 键为字符串的唯一首字符
- 值为以该字符开头的字符串列表,保持原列表中的出现顺序
示例输入:
mystrings = ["banana", "xylophone", "duck", "carriage", "bandana", "diamond", "cardinal"]
示例输出:
{'b': ['banana', 'bandana'], 'x': ['xylophone'], 'd': ['duck', 'diamond'], 'c': ['carriage', 'cardinal']}
基础循环实现
如果你想用基础循环手动实现,这是最直接的写法:
def group_by_first_char(mystrings): result = {} for s in mystrings: first_char = s[0] # 若首字符未在字典中,先初始化空列表 if first_char not in result: result[first_char] = [] # 将当前字符串追加到对应列表 result[first_char].append(s) return result # 测试示例 mystrings = ["banana", "xylophone", "duck", "carriage", "bandana", "diamond", "cardinal"] print(group_by_first_char(mystrings))
核心逻辑:
- 初始化空字典存储结果
- 遍历每个字符串,提取首字符
- 检查字符是否已作为键存在:不存在则创建空列表,存在则直接追加当前字符串
- 完全保留原列表的元素顺序
更简洁的实现:用collections.defaultdict
Python的collections.defaultdict可以自动处理键不存在的情况,简化代码:
from collections import defaultdict def group_by_first_char(mystrings): result = defaultdict(list) for s in mystrings: result[s[0]].append(s) # 可选:转换为普通字典返回(若不需要defaultdict类型) return dict(result) # 测试示例 mystrings = ["banana", "xylophone", "duck", "carriage", "bandana", "diamond", "cardinal"] print(group_by_first_char(mystrings))
defaultdict(list)会在访问未定义的键时自动生成空列表,省去了手动判断的步骤,代码更简洁,逻辑和基础循环完全一致。
内容的提问来源于stack exchange,提问作者Andrew Gifford
相关产品推荐
相关产品推荐

