python - 如何在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'}
解决方案
如果该模式成立,则以单词开头的行是外部字典的键,以空格开头的行是内部字典的键值对。使用 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'}})
推荐阅读
- javascript - 如何在弹出窗口的上下文中放置条件?
- bash - 将文件重命名为编号顺序时保留原始顺序?
- flutter - 在 Flutter 中解析 Json 日期
- javascript - 将 typescript 类型和接口合二为一
- javascript - 变量显示在一个函数中,但没有另一个 Jquery
- dask - 如何从 dask 数组 (dd.from_dask_array) 创建 dask 系列
- vue.js - 更改输入文本值 vuex
- performance - 有没有更快的方法来找到有向无环图中顶点的最大属性 [持续时间] 的路径?
- javascript - ChartJS:空白页 | 出了什么问题?
- python - 尝试从另一个类更新时 Tkinter Canvas 上的错误