Как преобразовать текстовый файл в словарь в python - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть текстовый файл, и мне интересно, как сделать значения внутри словаря. Прямо сейчас у меня есть это.

def load_map(map_file_name):
    my_map = open(map_file_name, 'r')
    my_line = my_map.readlines()
    dict = {}

for lines in my_line:
    my_line = lines.split()
    dict[int(my_line[0])] = ','.join(my_line[1:])
    lines.strip('\n')
    lines.split(',')
    print(lines)

У меня есть текстовый файл

The Dorms
        McDonald's, 50
        Burger King, 100
        Starbucks, 120
McDonald's
        Starbucks, 50
        Taco Bell, 60

Мне нужно, чтобы он был в формате:

{'The Dorms': {'McDonalds': ' 50', 'Burger King': ' 100', 
'Starbucks': ' 120'}, 
'McDonalds': {'Starbucks': ' 50', 'Taco Bell': ' 60'}

1 Ответ

1 голос
/ 05 апреля 2020

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

from collections import defaultdict
import re

vals = defaultdict(dict)    
with open(map_file_name, 'r') as f:
    # if the line starts with a character, it is a dict key
    # if it does not, then it is part of the value
    dict_key = None
    for line in f:    
        if re.match(r'\w', line):
            dict_key = line.strip()
        else:
            # split Starbucks, 50 on ', '
            inner_key, inner_value = line.split(', ')
            vals[dict_key][inner_key.strip()] = inner_value.strip()

>>>vals
defaultdict(dict,
            {'The Dorms': {"McDonald's": '50',
              'Burger King': '100',
              'Starbucks': '120'},
             "McDonald's": {'Starbucks': '50', 'Taco Bell': '60'}})

...