2016-04-17 6 views
2

zu sortieren Need HOST String-Array von seiner zugehörigen Schwimmer Geschwindigkeit sortierenPythonic Weg Array von String von einer zugehörigen Nummer

Gibt es nette Art und Weise zu bekommen Array von sortierten Tupel? Kann ich geordnete Arrays eliminieren?

#!/usr/bin/env python 

def getSpeed(url): 
    if url == 'h1': 
     return 0.522611856461 
    elif url == 'h2': 
     return 0.438368797302 
    elif url == 'h3': 
     return 0.443703174591 

def orderHosts(): 
    hostInfo = [] 
    ordered = [] 
    hosts = ['h1', 'h2', 'h3'] 
    for host in hosts: 
     hostInfo.append((host, getSpeed(host))) 

    print hostInfo 
    return ordered 

if __name__ == "__main__": 
    print("orderedHosts {}".format(orderHosts())) 

output:

[('h1', 0.522611856461), ('h2', 0.438368797302), ('h3', 0.443703174591)] 

orderedHosts [] 
+0

Warum haben Sie eine Funktion nur um Werte zu speichern? Warum nicht ein 'Wörterbuch' verwenden? Was genau willst du tun? – MaxNoe

+0

Funktion OrderedHosts muss Array von Host zurückgegeben, geordnet nach getSpeed-Wert. 'hostInfo' könnte ein Wörterbuch anstelle von Array sein, in dem ich Tupel angehängt habe, also würde append wie' hostInfo [speed] = host' werden. Ich dachte, es wäre einfacher, Tupel zu sortieren. –

+0

Sie haben mich falsch verstanden. Ich sprach über die getSpeed-Funktion – MaxNoe

Antwort

1

Sie können die key Parameter von sort oder sorted verwenden, um eine Funktion zu setzen, bevor aufgerufen Sortierung. In Ihrem Fall sollte sorted(hosts, key=getSpeed) genug sein.

1

Die sorted eingebaute Funktion nimmt ein key= Argument. Sie können das verwenden, um eine Funktion zur Verfügung zu stellen, die den Vergleich Schlüssel zurück (in diesem Fall die Geschwindigkeit) wie folgt:

def getSpeed(host): 
    ... as you had it 
    return speed 

hosts = ['h1', 'h2', 'h3'] 
ordered_hosts = sorted(hosts, key=getSpeed) 
+0

In meinem aktuellen Programm gibt die getSpeed-Funktion ein Response-Objekt aus Requests zurück, das ein XML-Dokument mit einem möglichen Fehlerstatus ist. Es gibt ein Response.duration-Attribut, aber keine einfache Funktion wie getSpeed. Ich wollte versuchen, über das Sortieren von Tupel-Arrays zu fragen, Tupel in Array-ODER-Sortierwörterbücher umzuwandeln, Wörterbücher in Arrays umzuwandeln. –

Verwandte Themen