[Zope] building a sorted dictionary

Andreas Jung andreas@andreas-jung.com
Thu, 16 May 2002 20:33:46 -0400


Not sure if this approach solves your problem but you could
convert the dictionary to a list using yourdict.items(). This
returns a list of key-value pairs. Then you can call sort() on the
list with a customized sort function that compares the attributes:

lst = aDict.items()
lst.sort(lambda x,y: cmp(x[1]['attr_s'], y[1]['attr_s'])

Hope this helps,
Andreas
----- Original Message -----
From: "p.t." <p.training@tin.it>
To: <zope@zope.org>
Sent: Thursday, May 16, 2002 20:15
Subject: Re: [Zope] building a sorted dictionary


> Yes, thanks to the list-hints, now I know a bit better.
> I do not undestand the "logical reason" why a map or dictionary should
> necessarely be random (fortunatly this is not true for printed
> doctionaries!), but this is how it works in Python.
>
> Now, my real problem is not directly connected with sorting the mapping
> keys, but having an access to the dictionary keys sorted according an
> attribute value in a structure like:
>
> aDict = {key_m:{attr_a:xx, attr_s:'K', ...}, key_b:{attr_a:yy, attr_s:'D',
> ...}, ...}
>
> where the sorting item is attr_s.
> So, I do need to get  key_b  value before  key_m  value because attr_s is
> 'D' in key_b and 'K' in key_m.
>
> My attempt was to avoid a dynamic sorting on attr_s each time a need a
> sequenced access, trying to produce a static and already sorted
dictionary.
> Now I suppose that to avoid such dynamic sorting I have to extract a
> dictionary like:
>
> reverseDict = {5:key_m, 2:key_b, ...}
> reverseItems = reverseDict.keys()
> reverseItems.sort()
>
> Then to get the attr_a value in the expected sequence:
>
> for item in reverseItems:
>     attr_a = aDict[ reverseDict[ item] ]['attr_a']
>     ...
>
> Following Andreas's suggestion, I didn't find a better solution looking
> around ( python.faqts and ASPN/Python).
> Some more hints?
> TIA,
> p.t.
>
>
> At 18:27 16/05/2002 -0400, Andreas Jung wrote:
> >Python dictionaries are unsorted. I have seen several implementations of
> >sorted
> >dictionaries flying around on the net. Check google for "python sorted
> >dictionary" or so.
> >
> >-aj
> >
> >----- Original Message -----
> >From: "p.t." <p.training@tin.it>
> >To: <zope@zope.org>
> >Sent: Thursday, May 16, 2002 17:59
> >Subject: [Zope] building a sorted dictionary
> >
> >
> > > Not knowing Python very well, I could'nt manage to find a way to build
a
> > > dictionary in a predefined sort sequence: any attempt produces a
"random"
> > > result.
> > > Any hint?
> > > TIA,
> > > p.t.
> > >
>
>
>
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )
>