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

Python迭代字典存值更新:按Speaker存储语音文本的最优方案

解决Python中迭代存储并更新字典的Speaker文本映射问题

我懂你现在的困扰:你想遍历文本列表,把每个Speaker对应的Group和语音文本存储到字典里,但现有的代码每次迭代都会覆盖之前的数据,最后只留下最后一个Speaker的信息,完全不是你想要的结果。

问题出在哪?

你初始化的dictspeaker是单个字典对象,每次循环调用update()都会把里面的键值对替换成当前Speaker的信息,相当于一直在修改同一个字典,而不是为每个Speaker创建独立的条目。最终自然只能得到最后一次迭代的结果。

正确的解决方案

我们需要调整数据结构:用一个外层字典,把每个Speaker的名字作为键,对应的值是包含Group和Text的子字典(如果一个Speaker有多段文本,Text可以用列表来存储多条内容)。这样就能实现每个Speaker的信息独立存储,迭代时只更新对应Speaker的条目。

完整示例代码

import re

def speaker_texts(cleanedList):
    # 外层字典:键为Speaker名称,值为包含Group和Text的子字典
    speaker_dict = {}
    # 正则表达式:匹配Speaker名称和Group(比如 "Alice (GROUP_A)" 这样的格式)
    pattern_speaker = r"([A-Z]+[a-z]*)\s*\(([A-Z]*)\)"
    
    for sent in cleanedList:
        # 提取当前句子中的Speaker和Group信息
        matches = re.findall(pattern_speaker, sent)
        if matches:
            # 取第一个匹配结果(假设每个句子只有一个Speaker标识)
            speaker_name, group = matches[0]
            # 提取句子中的文本内容:去掉Speaker标识部分
            text_content = re.sub(pattern_speaker, "", sent).strip()
            
            # 判断当前Speaker是否已经在字典中
            if speaker_name in speaker_dict:
                # 如果存在,追加文本到Text列表
                speaker_dict[speaker_name]["Text"].append(text_content)
            else:
                # 如果不存在,创建新的条目,Text初始化为列表存储第一条文本
                speaker_dict[speaker_name] = {
                    "Group": group,
                    "Text": [text_content]
                }
    return speaker_dict

关键说明

  • 数据结构设计:外层字典speaker_dict确保每个Speaker有独立的条目,避免覆盖;用列表存储Text是为了支持一个Speaker有多段语音文本的场景。
  • 文本提取:用re.sub()去掉句子中的Speaker标识部分,得到纯文本内容。
  • 迭代更新逻辑:每次迭代先判断Speaker是否已存在,存在则追加文本,不存在则新建条目,保证所有Speaker的信息都被保留。

测试示例

假设你的cleanedList是这样的:

cleanedList = [
    "Alice (GROUP_A) Hello everyone!",
    "Bob (GROUP_B) Hi Alice!",
    "Alice (GROUP_A) Nice to meet you Bob."
]

调用speaker_texts(cleanedList)后,得到的结果会是:

{
    "Alice": {
        "Group": "GROUP_A",
        "Text": ["Hello everyone!", "Nice to meet you Bob."]
    },
    "Bob": {
        "Group": "GROUP_B",
        "Text": ["Hi Alice!"]
    }
}

这样就完美实现了每个Speaker的信息存储与更新啦~

内容的提问来源于stack exchange,提问作者madik_atma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:37:54