![]() |
A sort question
Hi all,
I have a sort questions. I can't really find an easy way to do this, so any advice is appreciated. Basically, I have a few dictionaries as such: {a:[7,8,9]} {b:[4,5,6,]} {c:[1,2,3]} Is there any easy way to sort by the second item in the list such that I get: {c:[1,2,3]} {b:[4,5,6,]} {a:[7,8,9]} I can do something similar in the shell with sort -k, but I'm not sure if there is a simple way to do this in python. Any help is appreciated! :) |
Re: A sort question
Sure thing. Just use a lambda function as a sort callback to the .sort() method.
Lambda functions allow you to pass a function as an argument. You could also create a function with def, and pass that through, but it's not as fancy. This is according to your example, where each dictionary always has one item. If it doesn't always have one item, you will have to do some sort of nested sort according to more specific requirements. :
>>> foo = [ {'a':[7,8,9]}, {'b':[4,5,6]}, {'c':[1,2,3]}, {'d':[0,4,10]} ]I'm not sure how much gibberish I'm spouting, so if you need me to explain sort callbacks or lambda functions, just ask. |
Re: A sort question
First of all, I think you're representing your dictionary wrongly. Don't you mean:
:
{ a:[7,8,9],You have to remember that a dictionary has no inherent order. That said, you can convert the dictionary into a tuple using the items or iteritems methods, which return a list of tuples and an iterator over said list respectively.A bit of Googling found this interesting solution: http://www.python.org/dev/peps/pep-0265/ For a dictionary x, this will work::
sorted(x.iteritems(), key = lambda ( (_, value) ) : value)sorted function to iterate over the list of tuples and to use the second part of the tuple as its sort key.EDIT: Seems Sane beat me to it, though his method works differently. |
Re: A sort question
Yes. It seems a bit strange to me too how each dictionary has only one item.
But it may not be the way you suggested Ooble, because a dictionary can not be sorted. The order of items in a dictionary can't be changed since the positions are arbitrarily assigned as a result of hash values. If you wanted to sort a dictionary, you would have to change its data type (which is in fact accomplished with the code you posted). |
Re: A sort question
Shocker, if you want a list of single-value dictionaries as Sane suggests, you'd be better off using tuples instead of dictionaries anyway.
|
| All times are GMT -5. The time now is 12:32 AM. |
Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC