如何将不以“\t”开头的文件内容设置为键,将以“\t”开头并以“\n”结尾的文件内容设置为其前面的键的值?

2024-06-10 13:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一本这样的字典:{ 'The Dorms': {'Public Policy' : 50, 'Physics Building' : 100, 'The Commons' : 120}, ...}

名单如下:

['The Dorms\n', '\tPublic Policy, 50\n', '\tPhysics Building, 100\n', '\tThe Commons, 120\n', 'Public Policy\n', '\tPhysics Building, 50\n', '\tThe Commons, 60\n', 'Physics Building\n', '\tThe Commons, 30\n', '\tThe Quad, 70\n', 'The Commons\n', '\tThe Quad, 15\n', '\tBiology Building, 20\n', 'The Quad\n', '\tBiology Building, 35\n', '\tMath Psych Building, 50\n', 'Biology Building\n', '\tMath Psych Building, 75\n', '\tUniversity Center, 125\n', 'Math Psych Building\n', '\tThe Stairs by Sherman, 50\n', '\tUniversity Center, 35\n', 'University Center\n', '\tEngineering Building, 75\n', '\tThe Stairs by Sherman, 25\n', 'Engineering Building\n', '\tITE, 30\n', 'The Stairs by Sherman\n', '\tITE, 50\n', 'ITE']

这是我的代码:

def load_map(map_file_name):
    # map_list = []
    map_dict = {}
    map_file = open(map_file_name, "r")
    map_list = map_file.readlines()
    for map in map_file:
        map_content = map.strip("\n").split(",")
        map_list.append(map_content)
    for map in map_list:
        map_dict[map[0]] = map[1:]
    print(map_dict)
if __name__ == "__main__":
    map_file_name = input("What is the map file? ")
    load_map(map_file_name)

Tags: thenamemapbypolicylistfilecenter
1条回答
网友
1楼 · 发布于 2024-06-10 13:26:48

由于文件的内容显然是文本Python数据,因此应该使用ast.literal_eval来解析它,而不是使用某种特殊方法

然后,您可以围绕您的值循环并处理它们:

def load_map(mapfile):
    with open(mapfile, encoding='utf-8') as f:
        data = ast.literal_eval(f.read())

    m = {}
    current_section = None
    for item in data:
        if not item.startswith('\t'):
            current_section = m[item.strip()] = {}
        else:
            k, v = item.split(',')
            current_section[k.strip()] = int(v.strip())
    print(m)

相关问题 更多 >