A large csv I was given has a large table of flight data. A function I wrote to help parse it iterates over the column of Flight ID's, and then returns a dictionary containing the index and value of every unique Flight ID in order of first appearance. Dictionary = { Index: FID, ... } This comes as a quick adjustment to an older function that didn't require having to worry about FID repeats in the column (a few hundred thousand rows later...). Example: 20110117559515, ... 20110117559515, ... 20110117559515, ... 20110117559572, ... 20110117559572, ... 20110117559572, ... 20110117559574, ... 20110117559587, ... 20110117559588, ... and so on for 5.3 million some rows. Right now, I have it iterating over and comparing each value in order. If a value is equal to the value after it, it skips it. If the next value is different, it stores the value in the dictionary. I changed it to now also check if that value has already occured before, and if so, to skip it. Here's my code: def DiscoverEarliestIndex(self, number): thegoodshit = {} columnvalues = self.column(number) column_enum = {} for a, b in enumerate(columnvalues): column_enum[a] = b i = 0 while i < (len(columnvalues) - 1): next = column_enum[i+1] if columnvalues[i] == next: i += 1 else: if next in thegoodshit.values(): i += 1 continue else: thegoodshit[i+1]= next i += 1 else: return thegoodshit It's very inefficient, and slows down as the dictionary grows. The column has 5.2 million rows, so it's obviously not a good idea to handle this much with Python, but I'm stuck with it for now. Is there a more efficient way to write this function?