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

Python遍历含子列表的列表,将同ID对应值归入同一字典键

解决Python中按ID分组追踪数据并写入文件的问题

嘿,我明白你遇到的困扰啦——你的代码每次碰到同一个动物ID时,都会用新的记录覆盖掉之前存储的值,所以最后每个ID只留下了最后一条追踪数据。别担心,有几个简单易实现的办法能搞定这个问题!

方法一:手动检查字典键是否存在

这是最直观的方式,适合新手理解底层逻辑:

# 初始化空字典
items = {}
for line in aList:
    animal_id = line[0]
    # 提取当前行的date、time、lat、lon
    tracking_data = line[1:]
    
    # 如果这个ID还没在字典里,先创建一个空列表来存它的所有数据
    if animal_id not in items:
        items[animal_id] = []
    # 把当前这条追踪数据追加到对应ID的列表中
    items[animal_id].append(tracking_data)

这样处理后,每个ID对应的都是一个包含所有追踪记录的列表,完全符合你期望的字典格式。

方法二:使用collections.defaultdict(更简洁)

Python的标准库collections里的defaultdict可以帮我们省去手动判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

# 初始化一个默认值为列表的字典
items = defaultdict(list)
for line in aList:
    animal_id = line[0]
    tracking_data = line[1:]
    # 直接追加数据,不存在的键会自动创建空列表
    items[animal_id].append(tracking_data)

这个方法和第一种逻辑本质一样,但代码更短,写起来更高效。

接下来:将每个ID的数据写入单独的TXT文件

分组完成后,我们可以遍历字典,把每个ID的所有数据写入对应的文件:

for animal_id, data_list in items.items():
    # 以ID作为文件名,比如"25.txt"
    with open(f"{animal_id}.txt", "w", encoding="utf-8") as file:
        for data in data_list:
            # 将每条数据的元素用逗号分隔(你也可以换成空格或其他分隔符)
            line = ",".join(data) + "\n"
            file.write(line)

使用with open语句会自动帮我们关闭文件,避免资源泄漏,非常安全。

用你给出的示例数据测试的话,最终items['25']会包含两条追踪记录,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:23:25