Efficiently building ordered dict

Bryan bryanvick at gmail.com
Mon Feb 22 11:32:36 EST 2010


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])

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



More information about the Python-list mailing list