【发布时间】:2013-03-19 20:35:31
【问题描述】:
给我的一个大 csv 文件有一个大的航班数据表。我编写的一个用于帮助解析它的函数会遍历 Flight ID 列,然后返回一个字典,其中包含每个唯一 Flight ID 的索引和值(按首次出现的顺序)。
字典 = { 索引:FID, ... }
这是对旧功能的快速调整,不需要担心列中的 FID 重复(几十万行之后...)。
现在,我让它迭代并按顺序比较每个值。如果一个值等于它后面的值,它会跳过它。如果下一个值不同,它将值存储在字典中。我将其更改为现在还检查该值之前是否已经出现,如果是,则跳过它。
这是我的代码:
def DiscoverEarliestIndex(self, number):
finaldata = {}
columnvalues = self.column(number)
columnenum = {}
for a, b in enumerate(columnvalues):
columnenum[a] = b
i = 0
while i < (len(columnvalues) - 1):
next = columnenum[i+1]
if columnvalues[i] == next:
i += 1
else:
if next in finaldata.values():
i += 1
continue
else:
finaldata[i+1]= next
i += 1
else:
return finaldata
效率非常低,并且随着字典的增长而变慢。该列有 520 万行,所以用 Python 处理这么多显然不是一个好主意,但我现在坚持下去。
有没有更高效的方法来编写这个函数?
【问题讨论】:
-
旁白:我不确定您的命名法决定——无论是在这里还是在前面的问题中——对你的专业服务有多大,尽管显然你的里程可能会有所不同。无论如何,这让我决定不花时间指出某些问题:生命太短暂了。 (提示:
.values()返回什么?为什么用它进行会员测试是个坏主意?) -
不知道我的牧师在 Stackoverflow 上,下次我会记住的。
标签: python algorithm iteration