возврат словаря и присвоение ключей и значений из текстового файла

#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 , значения ваших переменных, чтобы увидеть, что происходит. Попробуйте с 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