Wie Sortieren Sie die Ausgabe der python-Befehl?
Python-Anfänger hier. Lassen Sie uns sagen, dass ich etwas am Ende meines scripts, die Abfragen Informationen aus dem system und gibt Sie in diesem format:
print my_list_of_food(blah)
und es gibt eine Liste wie:
('Apples', 4, 4792320)
('Oranges', 2, 2777088)
('Pickles', 3, 4485120)
('Pumpkins', 1, 5074944)
('more stuff', 4545, 345345)
Wie kann ich dann Sortieren, dass die Ausgabe basierend auf der 2-Feld, so dass es würde wie folgt Aussehen:
('Pumpkins', 1, 5074944)
('Oranges', 2, 2777088)
('Pickles', 3, 4485120)
('Apples', 4, 4792320)
Andere als Import von einem bash-Befehl zu cut -d "," -f 2 | head 4
würde ich eher python verwenden. Ich weiß, dass ich verwenden können, sortiert oder Sortieren zum Sortieren einer vorhandenen Tupel oder dictionary-aber ich bin mir nicht sicher, wie das Sortieren der Ausgabe von print. Ich habe einige der Forschung getan und alles, was Punkte der Implementierung von Sortieren in meinem Skript anstelle der Sortierung einer print-Ausgabe aber wer weiß, vielleicht hat ja jemand eine Lösung. Danke.
UPDATE:
Danke an alle. Ich habe versucht, alle Lösungen funktionieren, aber ich bekomme immer diese Fehlermeldung:
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
Ich habe versucht, um dieses an den Anfang des Skripts:
from __future__ import print_function
aber kein Glück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie das key-argument zu Sortieren. In Ihrem Fall,
wird den trick tun. Der Schlüssel sollte die Funktion eine ganze Zahl zurück, in der Regel.
print
als eine Funktion kann verwirrend hiermy_list_of_food
werden konnte, eine Funktion, die eine Zeichenfolge zurückgibt.... Wenn Sie eine gedruckte Liste oder ein set-Objekt, wäre es nicht drucken mit newlines zwischen den Mitgliedern.print()
- es ist in der Tat gültig, python2, wie lange, wie Sie einen letzten 2.x oder Sie importieren Sie aus__future__
. Es ist nur so, dass @mister mister erwähnt hat, dass er ein Anfänger, so kann er stolpert über die möglicheSyntaxError
__future__
). Dies ist in der Tat sehr hilfreich, danke für die info!Wenn es druckt aus, dass die Art und Weise, als entweder
my_list_of_food(blah)
gibt einen string zurück, oder es gibt eine Instanz der Klasse, die hat eine__repr__
Methode, die zurückgibt, dass die string - ... Ihre beste Wette ist, um Daten in die aktuelle Liste format, bevor es zu einem string.Wenn es gibt eine Instanz der Klasse, erhalten Sie die Liste und Sortieren Sie Sie mit der Taste... Sonst müssen Sie zum analysieren den text, so werde ich die Adresse nur teilweise:
Kann man nicht Sortieren nach der Ausgabe
stdout
. Nun, das solltest du nicht, da es stark erschwert eine einfache Aufgabe. Stattdessen Sortieren der Wert und drucken Sie das Ergebnis:Den Teil, wo Sie Schwierigkeiten hatten, ist die Sortierung nach dem zweiten Feld; das ist, warum, dass
key
argument ist es - um die Standardeinstellung zu überschreiben bestellen (das wäre das erste Element der Tupel). Erfahren Sie mehr über die wichtigsten Funktionen, prüfen dieser Abschnitt auf dem python-Sortierung, WIEWenn Sie sich immer noch Fragen, technisch, Sie könnte Art der
stdout
ausgegeben, wenn Sie ersetztsys.stdout
mit einem wrapper-Objekt, das die Ausgabe gepuffert, dann sortiert und gedruckt wird es (in der realen stdout) in regelmäßigen Abständen, aber es ist sinnlos und schwer zu bekommen Recht, IMHO.OK: Wenn Sie wirklich haben, um es so zu machen: erfassen Sie die Ausgabe der Funktion in
ein StringIO-Objekt und Sortieren Sie die Zeilen Lesen Objekt hin und zurück.
[Schritt 1]
[Schritt 2: definieren Sie eine wichtige Funktion für das aufteilen des strings in Komma
und vergleichen Sie das 2. Feld numerisch. ]
[Schritt 3: Sortieren und drucken]