sorting nested dictionary
Gustavo Cordova
gcordova at hebmex.com
Wed Mar 13 16:01:11 EST 2002
>
> thanks. the following solution was also sent, seems to work,
> but i don't know why ...
>
> ---------------------------------------------------------
> from pprint import pprint
> h = {'ids': {'2778xxxxx': {'weighted': 4.6, 'raw': 5.0},
> '3059xxxxx': {'weighted': 6.1, 'raw': 6.0},
> '3188xxxxx': {'weighted': 3.2, 'raw': 4.0},
> '3216xxxxx': {'weighted': 10.1, 'raw': 7.0},
> '3257xxxxx': {'weighted': 9.7, 'raw': 9.0},
> '3266xxxxx': {'weighted': 4.8, 'raw': 3.0},}}
>
> def compare(a, b):
> return cmp(a[1]['weighted'], b[1]['weighted'])
>
> pairs = h['ids'].items()
> pairs.sort(compare)
>
> pprint (pairs)
>
> ----------------------------------------------------------
It works because....
>>> pairs = h['ids'].items()
Now, "pairs" contains a list of tuples, in the form:
pairs = [
( '2778xxxxx', {'weighted': 4.6, 'raw': 5.0} ),
( '3059xxxxx', {'weighted': 6.1, 'raw': 6.0} ),
( '3188xxxxx', {'weighted': 3.2, 'raw': 4.0} ),
( '3216xxxxx', {'weighted': 10.1, 'raw': 7.0} ),
( '3257xxxxx', {'weighted': 9.7, 'raw': 9.0} ),
( '3266xxxxx', {'weighted': 4.8, 'raw': 3.0} ) ]
The expression "a[1]['weighted']" returns tne value of the
item "weighted" of the second element of a tuple, so the function
def compare(a,b):
return cmp(a[1]['weighted'],b[1]['weighted'])
returns the comparison of the "weighted" sub-element of tuples a and b.
So now, you simple sort the list, specifying this function as the
comparison function to use:
pairs.sort(compare)
ta-daa.
Ain't Python the best?
damn...
so powerful, and so easy to understand.
-gustavo
More information about the Python-list
mailing list