Efficiently building ordered dict
MRAB
python at mrabarnett.plus.com
Mon Feb 22 13:04:20 EST 2010
Bryan wrote:
> On Feb 22, 9:19 am, MRAB <pyt... at mrabarnett.plus.com> wrote:
>> Bryan wrote:
>>> 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?
>> Why are you building a dict from a list and then an ordered dict from
>> that? Just build the ordered dict from the list, because it's behaves
>> like a dict, except for remembering the order in which the keys were
>> added.
>
> Could you write some pseudo-code for that? I'm not sure how I would
> add the items to the OrderedDict while looping through the list.
> Wouldn't the list need to be sorted first (which in this case isn't
> practical)?
>
ordered != sorted.
If you want the ordered dict to be sorted by key then build a dict first
and then create the ordered dict from the sorted dict. I think the
quickest way to build the sorted dict is:
orderedDict = OrderedDict(sorted(unorderedDict.items()))
although I haven't tried 'sorteddict' (see Daniel Stutzbach's post).
More information about the Python-list
mailing list