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 )