2016-04-17 2 views
2

нужно сортировать HOST массива строк с помощью ассоциированной скорости поплавкаPythonic способ сортировки массива строки по соответствующему номеру

Есть хороший способ получить массив из отсортированных кортежей? Могу ли я удалить упорядоченный массив?

#!/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())) 

выход:

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

orderedHosts [] 
+0

Почему у вас есть функция только для хранения значений? Почему бы не использовать словарь? Что вы делаете? – MaxNoe

+0

Функция orderHosts должна возвращать массив хоста, упорядоченный по значению getSpeed. 'hostInfo' может быть словарем вместо массива, в котором я добавляю кортежи, поэтому append будет выглядеть как' hostInfo [speed] = host'. Я думал, что будет проще сортировать кортежи. –

+0

Вы меня неправильно поняли. Я говорил о функции getSpeed ​​ – MaxNoe

ответ

1

Вы можете использовать параметр sort или sortedkey установить функцию, которая вызывается перед сортировка. В вашем случае должно быть достаточно sorted(hosts, key=getSpeed).

1

sorted встроенная функция принимает key= аргумент. Вы можете использовать это, чтобы обеспечить функцию, которая будет возвращать ключ сравнения (в данном случае, скорость) как так:

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

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

В моей реальной программе функция getSpeed ​​возвращает объект Response из Requests, который является документом XML с возможным статусом ошибки и т. Д. Существует атрибут Response.duration, но нет простой функции, такой как getSpeed. Я попытаюсь спросить о сортировке массива кортежей, преобразовании кортежей в массив ИЛИ сортирующем словаре, преобразовании словаря в массив. –

Смежные вопросы