2010-12-02 17 views
14

Ich weiß tat ähnliche Fragen wurde schon mehrmals gefragt. Und ich mache jetzt wie man die Suchfunktion benutzt, aber es funktioniert immer noch nicht.Python Sortierung Liste von Listen mit Casting

Also hier ist das Problem Setup. Ich habe eine Liste von Listen mit Strings. Eine Spalte enthält Strings, die tatsächlich Float-Werte darstellen. Und es ist auch die Spalte, nach der ich sortieren möchte. Das Problem ist, dass Python das - (Minus) Zeichen bei Einträgen ignoriert. So ein Beispiel Liste:

[[blaa, '0.3', bli], [bla, '0.1', blub], [bla, '-0.2', blub]] 

wird wie folgt sortiert:

[[bla, '0.1', blub], [bla, '-0.2', blub], [blaa, '0.3', bli]] 

und nicht, wie es sein sollte:

[[bla, '-0.2', blub],[bla, '0.1', blub], [blaa, '0.3', bli]] 

Bisher habe ich versucht:

  • Gießen der zweiten Spalte zu float und Sortieren nach dass Spalte

wie:

for i in mylist: 
    i[1] = float(i[1])  

mylist.sort(key=lambda x: x[1]) 

oder mit

for i in mylist: 
    i[1] = float(i[1]) 

mylist.sort(key=operator.itemgetter(1)) 
  • Ich habe auch versucht, meine eigene vergleichen Funktion zu definieren:

wie:

mylist.sort(cmp=lambda x,y: cmp(float(x), float(y)), key=operator.itemgetter(1)) 

Und jede andere Kombination der oben genannten Methoden, auch das gleiche mit sorted. Bis jetzt ohne Erfolg, wird das Minuszeichen jedes Mal ignoriert. Wie kann das gelöst werden?

[bearbeiten] Auch schon versucht der Ignacio Vorschlag. Ich sollte erwähnen, ich muss Python 2.5 verwenden.

+0

das könnte also die Umweltprobleme sein. Überprüfen Sie Ihre Python-Version. – Kabie

+0

Wenn Sie meinen, dass etwas eine Zeichenkette sein soll, sollten Sie es als Hinweis auf Leute, die Ihren Code ausführen möchten, in Anführungszeichen setzen. – aaronasterling

+2

Wie sicher sind Sie, dass sie alle Saiten sind? –

Antwort

18
l = [["blaa", "0.3", "bli"], ["bla", "0.1", "blub"], ["bla", "-0.2", "blub"]] 

l.sort(key=lambda x: float(x[1])) 

>>> [['bla', '-0.2', 'blub'], ['bla', '0.1', 'blub'], ['blaa', '0.3', 'bli']] 
+0

auch versucht, dass mit jetzt Wirkung, vergessen Sie einfach, es in der Post über –

+6

Erwähnen Dann haben Sie etwas anderes goofed, weil das funktioniert. –

+0

Yap sieht aus als gäbe es etwas anderes nicht –

2

-Mine funktioniert gut, Python 3.1.2:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']] 
>>> sorted(l,key=lambda x:float(x[1])) 
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']] 

und 2.6.5:

>>> l=[['', '0.3', ''], ['', '0.1', ''], ['', '-0.2', '']] 
>>> sorted(l,key=lambda x:float(x[1])) 
[['', '-0.2', ''], ['', '0.1', ''], ['', '0.3', '']] 
+0

gibt es jetzt zu float zu werfen, habe ich eine Liste von Listen von Strings –

+0

@ inf.ig.sh: Wenn sogar sie zu float drehen dann sortieren fehlgeschlagen. Muss woanders schief gehen, nicht die Sortierfunktion. – Kabie

Verwandte Themen