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
相关产品推荐
相关产品推荐

