如何在 python 中将文本文件转换为字典?

How to convert a text file to a dictionary in python?

我有以下文本文件。

BREST:
Rennes 244

RENNES:
Breast 244
Caen 176
Nantes 107
Paris 348

CAEN:
Calais 120
Paris 241
Rennes 176

CALAIS:
Caen 120
Nancy 534
Paris 297

我正在尝试将其转换为以大写单词为键的字典。它应该是这样的:

roads = {'BREST': ['Rennes'],
         'RENNES': ['Brest', 'Caen', 'Nantes', 'Paris'],
         'CAEN': ['Calais', 'Paris', 'Rennes'],
         'CALAIS': ['Caen', 'Nancy', 'Paris']
         }

假设您正在读取名为 input.txt 的文件,这会产生所需的结果。

from collections import defaultdict

d = defaultdict(list)

with open('input.txt', 'r') as f:
    for line in f.read().splitlines():
        if not line: continue

        if line.endswith(':'):
            name = line.strip(':')
        else:
            d[name].append(line.split()[0])

如果您想保留号码,您可以为文件中的每个条目创建一个字典,并将联系人与相关联的号码存储起来。

from collections import defaultdict

d = defaultdict(dict)

with open('input.txt', 'r') as f:
    for line in f.read().splitlines():
        if not line: continue

        if line.endswith(':'):
            name = line.strip(':')
        else:
            contact, number = line.split(' ')
            d[name][contact] = int(number)

生成以下字典。

{'BREST': {'Rennes': 244},
 'CAEN': {'Calais': 120, 'Paris': 241, 'Rennes': 176},
 'CALAIS': {'Caen': 120, 'Nancy': 534, 'Paris': 297},
 'RENNES': {'Breast': 244, 'Caen': 176, 'Nantes': 107, 'Paris': 348}}