Hi Leo,
You can do this fairly easily using the 'key' keyword argument for the 'sorted' function. Sorting a normal list can be done easily as:
s = sorted(test)
But if you want to tell it how to generate the value to sort on, you can use the key keyword, for example:
s = sorted(test, key=str.lower)
As you can see, the key parameter gives a function to be called on each of the elements before comparing them. In that case it uses a built-in Python function to convert each element to lowercase, but you can write your own function very easily to do what you want. You can do this by writing a normal function, like:
def f(value):
return value.prop
and then calling it as follows:
s = sorted(test.itervalues(), key=f)
or by writing a lambda function, which is basically the same, but inline and without a name:
s = sorted(test.itervalues(), key=lambda x: x.prop)
I'm using test.itervalues() as the list to use here as that will just provide a list of the values in the dictionary, not the keys.
Hope that helps,
Cheers,
Robin
On 1 Sep 2012, at 15:53, Leo <linux@???> wrote:
> If I have a dictionary in Python, where the keys are strings, and the values are instances of a class of mine, how can I get the list of keys sorted based on a property on my class? I can obviously do this manually, but was wondering if there was an inbuilt Python way of doing it more easily. As an example:
>
> Class MyClass:
> def __init__(self, prop)
> self.prop = prop
>
> def main():
> test=dict()
> test["a"] = MyClass(46)
> test["b"] = MyClass(3)
> test["c"] = MyClass(15)
>
> # I would like to generate
> sortedTest=list()
> #containing b, c, a in that order.
>
> Thanks,
> Leo
>
>
> --
> Please post to: Hampshire@???
> Web Interface: https://mailman.lug.org.uk/mailman/listinfo/hampshire
> LUG URL: http://www.hantslug.org.uk
> --------------------------------------------------------------
--
Please post to: Hampshire@???
Web Interface:
https://mailman.lug.org.uk/mailman/listinfo/hampshire
LUG URL:
http://www.hantslug.org.uk
--------------------------------------------------------------