Проблема с использованием вставки сортировки со списком Python

Мне дали текстовый файл, который похож на следующее...

hello 20
world 30
i'm 50
ok 20

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

def insertion_sort():
    filename = input('Enter filename: ')
    lst = []
    for line in open(filename):
        lst.append(int(line))
    print(lst)
    for index in range(1,len(lst)):
        value = lst[index]
        leftvalue = index -1
        while leftvalue >= 0 and lst[leftvalue] > value:
            if value < lst[leftvalue]:
                lst[leftvalue + 1] = lst[leftvalue]
                lst[leftvalue] = value
                leftvalue = leftvalue - 1
            else:
                break
    return lst == insertion_sort()

Я получаю следующую ошибку...ValueError: invalid literal for int() with base 10: 'Merchant_0 96918\n'

Я попытался использовать float вместо int, но я не могу преобразовать строки в float.

1 ответ

Вы не можете получить целое число с:

lst.append(int(line))

если строка содержит, скажем, "мир 30"

Что вы пытаетесь получить именно? Если вы хотите получить числовое значение, попробуйте:

int(line.split(' ')[1])

Или лучше (работает, даже если в строках ввода есть несколько пробелов):

import re
reobj=re.search('(\d+)$',line)
int(reobj.group(1))

Весь процесс сортировки становится:

import operator
import re

lines = {}
for line in open('tst.txt'):
    reobj=re.search('(\d+)$',line)
    int_key=int(reobj.group(1))
    value=line[0:reobj.start()]
    lines[int_key]=value

# See : http://stackru.com/questions/613183/python-sort-a-dictionary-by-value?rq=1
print "Sorted : ", sorted(lines.iteritems(), key=operator.itemgetter(0))
Другие вопросы по тегам