Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you sort the output of a python command?

Tags:

python

sorting

Python beginner here. Let's say that I have something at the end of my script that queries info from a system and dumps it into this format:

print my_list_of_food(blah)

and it outputs a list like:

('Apples', 4, 4792320)
('Oranges', 2, 2777088)
('Pickles', 3, 4485120)
('Pumpkins', 1, 5074944)
('more stuff', 4545, 345345)

How do I then sort that output based on the 2nd field so that it would look like this:

('Pumpkins', 1, 5074944)
('Oranges', 2, 2777088)
('Pickles', 3, 4485120)
('Apples', 4, 4792320)

Other than importing a bash command to cut -d "," -f 2 | head 4 I'd rather use python. I know I can use sorted or sort to sort an existing tuple or dictionary but I'm not sure of how to sort the output of a print. I've done some research and everything points to implementing sort into my script instead of sorting a print output but who knows, maybe someone has a solution. Thanks.

UPDATE:

Thanks everyone. I've tried to make all of the solutions work but I keep getting this error:

File "test.py", line 18, in <lambda>
    print sorted(my_list_of_food(blah), key=lambda x: x[1])
TypeError: 'int' object is unsubscriptable

File "test.py", line 18, in <lambda>
    print(sorted(my_list_of_food(blah), key=lambda k: k[1]))
TypeError: 'int' object is unsubscriptable

I tried to include this at the beginning of the script:

from __future__ import print_function 

but no luck.

like image 283
Kryten Avatar asked Feb 01 '26 19:02

Kryten


2 Answers

You can use the key argument to the sort. In your case,

print(sorted(list_of_food, key=lambda k:k[1]))

will do the trick. The key function should return an integer, usually.

like image 133
Peter Avatar answered Feb 03 '26 07:02

Peter


You can't sort after outputting to stdout. Well, you shouldn't, since it's heavily complicating a simple task. Instead, you sort the value and print the result:

print sorted(my_list_of_food(blah), key=lambda x: x[1])

The part where you were having difficulties is sorting by the second field; that's why that key argument is there - to override the default ordering (which would be the first item of the tuple). To learn more about key functions, check this section on the python Sorting HOW TO

If you're still wondering, technically, you could sort the stdout output if you replaced sys.stdout with a wrapper object that buffered the output then sorted and printed it (to the real stdout) periodically, but it's pointless and hard to get right, IMHO.

like image 26
loopbackbee Avatar answered Feb 03 '26 07:02

loopbackbee