You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将小写字符串列表按首字符分组生成指定格式字典?

问题需求

给定全小写字符串列表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:30:56