#python #python-3.x #dictionary #key
#питон #python-3.x #словарь #Клавиша
Вопрос:
Я получаю сообщение об ошибке «индекс списка вне диапазона» для строки, в которой я пытаюсь присвоить ключи и значения для словаря. Я пытаюсь назвать элемент во второй строке как ключ, а первый — как значение. Текстовый файл, который я импортирую, выглядит следующим образом:
A0101 Брюшной менингит
A0102 Брюшной тиф с поражением сердца
A0103 Брюшной тиф пневмония
A0104 Брюшной тиф артрит
def disease_to_code_dictionary() :
infile = open("ICD10.txt","r")
header_row = infile.readline() # skip the header row
dictionary = {}
for line in infile :
cells = line.split("t") # split by the tab character
dictionary[cells[1]]=cells[0]
if len(cells) >= 2 : # only if the line had a tab
code = cells[0]
disease = cells[1]
disease = disease.lower() # lowercase
disease = disease.replace(""","") # remove all double quotes
infile.close()
Комментарии:
1. Ошибка гласит: «индекс списка вне диапазона» , поэтому ошибка заключается в том, что индекс больше, чем список. Линия такова
dictionary[cells[1]]=cells[0]
. Список такойcells
. Индексы0
и1
. Это объясняет это?2. Спасибо за ответ. Да, это верно. Поэтому я не уверен, чего мне не хватает, когда дело доходит до назначения ключей и значений, поскольку я создаю словарь. Я думал, что 0 и 1 будут идентифицировать элементы в строке 1 и строке 2. Поскольку список состоит из нескольких строк, должен ли я включать больше, чем просто 0 и 1?
3. Нет,
cells
не содержит строк. Вы должны использовать отладчик или, по крайней мереprint(line)
помощью иprint(cells)
.4. ааа… Я заменил «ячейки» на «строку» в словаре [строка [1]]= строка [0] строка. Я думаю, что в этом и была проблема. Спасибо!
Ответ №1:
Вы должны разделить строки на пробелы, а затем объединить все элементы из индекса 1
в конец списка в качестве ключа, а затем индексировать 0
как значение.
cell = line.strip("n").split(" ")
dictionary[' '.join(cell[1:])] = cell[0]
Я также обновляю это, чтобы использовать диспетчер контекста для обработки чтения файла.
def disease_to_code_dictionary():
with open("ICD10.txt", "r") as infile:
dictionary = {}
for line in infile:
cell = line.strip("n").split(" ")
dictionary[' '.join(cell[1:])] = cell[0]
return dictionary