Sort the values of a dict

mattia gervaz at gmail.com
Fri Dec 18 18:20:51 EST 2009


Il Fri, 18 Dec 2009 18:00:42 -0500, David Robinow ha scritto:

> On Fri, Dec 18, 2009 at 5:34 PM, mattia <gervaz at gmail.com> wrote:
>> Hi all, I have a dictionary that uses dates and a tuples ad key, value
>> pairs. I need to sort the values of the dict and insert everything in a
>> tuple. The additional problem is that I need to sort the values looking
>> at the i-th element of the list. I'm not that good at python (v3.1),
>> but this is my solution:
>>
>>>>> d = {1:('a', 1, 12), 5:('r', 21, 10), 2:('u', 9, 8)} t = [x for x in
>>>>> d.values()]
>>>>> def third(mls):
>> ...     return mls[2]
>> ...
>>>>> s = sorted(t, key=third)
>>>>> pres = []
>>>>> for x in s:
>> ...     for k in d.keys():
>> ...         if d[k] == x:
>> ...             pres.append(k)
>> ...             break
>> ...
>>>>> res = []
>>>>> for x in pres:
>> ...     res.append((x, d[x]))
>> ...
>>>>> res
>> [(2, ('u', 9, 8)), (5, ('r', 21, 10)), (1, ('a', 1, 12))]
>>>>>
>>>>>
>> Can you provide me a much pythonic solution (with comments if possible,
>> so I can actually learn something)?
>>
>> Thanks, Mattia
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
> I won't engage in any arguments about pythonicity but it seems simpler
> if you convert to a list of tuples right away.
> 
> d = {1:('a', 1, 12), 5:('r',21,10), 2:('u',9,8)} l = [(x, d[x]) for x in
> d.keys()]
> def third(q):
>     return q[1][2]
> 
> s = sorted(l, key=third)
> print s

Thanks, I'm not yet aware of all the wonderful conversions python can do, 
amazing.



More information about the Python-list mailing list