首页 > 解决方案 > 如何在python中将文本文件转换为字典

问题描述

我有一个文本文件,想知道如何在字典中创建值。现在我有这个。

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'}

标签: pythondictionary

解决方案


如果该模式成立,则以单词开头的行是外部字典的键,以空格开头的行是内部字典的键值对。使用 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'}})


推荐阅读