给我的一个大csv有一个很大的飞行数据表。我编写了一个函数来帮助解析它,它在flightid的列上迭代,然后返回一个字典,其中包含每个唯一航班ID的索引和值,按第一次出现的顺序排列。在
Dictionary={Index:FID。。。}在
这是对旧函数的快速调整,不需要担心列中的FID重复(几十万行之后…)。在
现在,我让它迭代并按顺序比较每个值。如果一个值等于它后面的值,它将跳过它。如果下一个值不同,它将该值存储在字典中。我将其更改为now还检查该值是否以前已出现过,如果是,则跳过它。
我的代码是:
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处理这么多显然不是一个好主意,但我现在还是坚持使用它。在
有没有更有效的方法来编写这个函数?在
可能是你的问题你在这里做什么
也许您可以使用
^{pr2}$set
来保存这些值并搜索它-类似于:为了直接回答您的问题,您应该能够通过dict理解和itertools模块来完成。在
我想这有点小意思。我不太乐意把口述复习两遍。但无论如何,我认为听写理解是相当有效的。另外,
groupby
假设您的键是按顺序排列的,也就是说,它假设所有的'a's索引被组合在一起,这在您的例子中似乎是正确的。在你实际上是在寻找一个数据库。数据库正是为大型数据集上的此类操作而建立的。使用CSV module一次解析整个CSV并将它们发送到数据库中要比将它们存储在dict中并对整个dict运行检查要快得多
*large* python dictionary with persistence storage for quick look-ups
相关问题 更多 >
编程相关推荐