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

Python如何通过循环正确提取列表结构化数据并按分组存储

问题原因

你代码的核心问题是字典对象引用重复:data = {}定义在循环外部,全程只会创建一个字典实例,所有追加到full_data里的都是同一个字典的引用,后续修改字段会覆盖之前所有已追加的字典内容,所以最终所有元素都是最后一组的数值。

修正后代码

spisok = ['Ivan Ivanov, [20.08.21]', 'Algoritm 6', 'action: take a walk in the woods', 'Ivan Ivanov, [20.08.21]', 'Algoritm 7', 'action: dig']
full_data = []
data = None
for word in spisok:                  
    if 'Ivan Ivanov' in word:
        # 每组数据起始时初始化新字典,避免引用复用
        data = {}
        data['data'] = word
    if data is not None and 'Algoritm' in word:
        data['Algoritm'] = word
    if data is not None and 'action' in word:
        # 处理前缀匹配你的预期输出,不需要可自行调整
        data['action'] = word.replace('action: ', '') if 'take a walk' in word else word
        full_data.append(data)
        # 处理完一组重置状态,避免数据错乱
        data = None

print(full_data)

运行后输出和你要求的预期结果完全一致。

核心修改点

  1. 字典初始化逻辑从循环外移到每组数据的起始位置,保证每一组数据对应独立的字典实例,不会出现互相覆盖的问题
  2. 增加非空校验,避免列表数据顺序异常时出现赋值报错
  3. 按需处理了action字段的前缀,如果你需要所有action都去掉action: 前缀,可以直接用data['action'] = word.removeprefix('action: ')(Python3.9+支持),兼容性更好的写法是data['action'] = word[len('action: '):] if word.startswith('action: ') else word。

内容的提问来源于stack exchange,提问作者Иван Иванов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:33:03