Как мне преобразовать текстовый файл в словарь

#python-3.x #split

#python-3.x #разделить

Вопрос:

Я хотел бы разобрать следующий текстовый файл в словарь:

 Train A
Travelled 150km
No longer in use
Stored in warehouse 

Train B
Travelled 100km
Used by X company
Daily usage
Actively upgrading
  

В качестве ключей в словаре конечного результата должны быть Train A и Train B , а остальные значения — в виде списка значений:

 {
'Train A': ['Travelled 150km', 'No longer in use', 'Stored in warehouse'], 
'Train B': ['Travelled 100km', 'Used by X company', 'Daily usage', 'Actively upgrading']
}
  

В настоящее время я пытался

 with open('file.txt') as f:
    data = f.read().split('n')
    dict = {}
    for i in data:
        key = i[0]
        value = i[1:]
        d[key] = value
print(dict)      
  

На самом деле не слишком уверен, где я ошибаюсь. Я хочу разделить n после строки A, где строка A является ключом, а вся остальная перечисленная информация является значением

Комментарии:

1. Это простое упражнение по программированию. Что вы пробовали? Пожалуйста, включите свой код.

2. @DYZ пробовал это, но это не работает

Ответ №1:

Ваши единицы разделены пустыми строками — поэтому сначала вы должны разделить их на две новые строки, а не на одну. Следующая реализация несколько неэффективна (она дважды разделяет одну и ту же переменную), но она работает, и вы можете улучшить ее, если хотите:

 [{x.split("n")[0]: x.split("n")[1:]} for x in data.split("nn")]
#[{'Train A': ['Travelled 150km', 'No longer in use', 
#  'Stored in warehouse']}, 
# {'Train B': ['Travelled 100km', 'Used by X company', 
#  'Daily usage', 'Actively upgrading'}]
  

Ответ №2:

Вы близки. Сначала вам нужно разделить файлы, используя пустую строку ( 'nn' ), затем продолжить реализацию вашей идеи.

 with open('file.txt') as f:
    data = f.read().split('nn') # <=== this is what's missing
    print(data)
    d = {}
    for i in data:
        i = i.split('n')
        key = i[0]
        value = i[1:]
        d[key] = value
print(d)