2016-02-04 5 views
2

Что я делаю неправильно здесь. Я возвращаю числа, но хотел бы, чтобы они были возвращены в низшем и высшем порядке.Численная сортировка содержимого переменных

def bus(): 
    busurl = ('https://api.tfl.gov.uk/Line/9/Arrivals?stopPointId=IDHERE&app_id= % secret &app_key= % key') 
    bus = requests.get(busurl) 
    busarrival = bus.json() 
    count = 0 

    for i in busarrival: 
     if count <= 2: 
      status = (i['timeToStation']) 
      result = (status/60) 
      print 'Next bus in {} mins'.format(result) 
      count += 1 
+1

Исправить ваши углубления. Где вы возвращаете какие-либо ценности? –

+0

Извините, я печатаю в конце, но то, что напечатано, не от самого низкого до самого высокого. Как я могу это достичь? Я пробовал использовать status.sort, но безрезультатно. –

+1

Используйте 'sorted (busarrival)' он должен исправить это. – Zety

ответ

1

Вы можете использовать sorted с помощью специального key функции сортировки по времени прибытия:

for i in sorted(busarrival, key=lambda i: i['timeToStation']): 
    if count <= 2: 
     status = (i['timeToStation']) 
     ... 

Или отсортировать список на месте перед циклом:

busarrival.sort(key=lambda i: i['timeToStation']) 
for i in busarrival: 
    ... 

Конечно , для этого требуется, чтобы каждая из записей имела значение 'timeToStation', а поле должно быть числом, а не строкой. Если это строка, сначала преобразуйте ее в число, например. key=lambda i: int(i['timeToStation'])

+0

Благодарим вас за это и объяснение. Я очень ценю это! –

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