Проблема с использованием вставки сортировки со списком 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))