我給出的一個大csv有一個大型的飛行數據表。我編寫的一個函數用於幫助解析它迭代Flight ID的列,然後返回一個包含每個唯一航班ID的索引和值的字典,以首次出現的順序排列。更有效地從Python中的csv列檢索每個唯一值的第一次出現
字典= {指數: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()'返回的是什麼?爲什麼會員測試是一個壞主意?) – DSM 2013-03-19 21:07:10
沒有意識到我的牧師是在Stackoverflow上,下次我會記住這一點。 – 2013-03-19 21:32:32