Efficiently building ordered dict

Alf P. Steinbach alfps at start.no
Mon Feb 22 19:57:56 CET 2010


* Bryan:
> I am looping through a list and creating a regular dictionary.  From
> that dict, I create an ordered dict.  I can't think of a way to build
> the ordered dict while going through the original loop.  Is there a
> way I can avoid creating the first unordered dict just to get the
> ordered dict?  Also, I am using pop(k) to retrieve the values from the
> unordered dict while building the ordered one because I figure that as
> the values are removed from the unordered dict, the lookups will
> become faster.  Is there a better idiom that the code below to create
> an ordered dict from an unordered list?
> 
> unorderedDict = {}
> for thing in unorderedList:
> 	if thing.id in unorderedDict:
> 		UpdateExistingValue(unorderedDict[thing.id])
> 	else:
> 		CreateNewValue(unorderedDict[thing.id])

If this were real code the last statement would generate an exception.


> orderedDict = OrderedDict()
> for k in sorted(unorderedDict.keys()):
> 	orderedDict[k]  unorderedDict.pop(k)

This is not even valid syntax.


Please

   (1) explain the problem that you're trying to solve, not how you
       imagine the solution, and

   (2) if you have any code, please post real code (copy and paste).

The above code is not real.


Cheers & hth.,

- Alf



More information about the Python-list mailing list