Как создать словарь из текстового файла, который содержит разные категории? - PullRequest
0 голосов
/ 05 ноября 2019

Если у меня есть текстовый файл:

apple:fruit
banana: fruit
carrot: vegetable
lettuce: vegetable

Как я могу получить словарь, который:

{fruit:[apple, banana], vegetable: [carrot, lettuce]}

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 05 ноября 2019

Используйте коллекции defaultdict для ведения списка.

from collections import defaultdict

res_dict = defaultdict(list)

with open('file.txt', 'r') as f:
    for line in f:
        value, name = line.rstrip().split(':')
        res_dict[name.strip()].append(value)
1 голос
/ 05 ноября 2019
file = open("text.txt", "r")
lines = file.readlines()
dict = {}
for line in lines:
    try:
       dict[line.split(":")[1].strip()].append(line.split(":")[0].strip())
    except:
       dict[line.split(":")[1].strip()] = [line.split(":")[0].strip()]

Я надеюсь, что это поможет вам в следующий раз, прежде чем вы спросите больше о своей проблеме и попробуете несколько кодов самостоятельно, чтобы вы могли больше узнать о кодировании:))

0 голосов
/ 05 ноября 2019

Довольно легко создать свой собственный подкласс словаря. Одним из преимуществ, помимо необходимости import всего, что имеет по сравнению с defaultdict(list), является то, что он печатается как обычный словарь.

class Vividict(dict):
    def __missing__(self, key):
        value = self[key] = list()
        return value


vividict = Vividict()
with open('fruits.txt') as file:
    for line in file:
        name, kind = line.replace(':', ' ').split()
        vividict[kind].append(name)

from pprint import pprint
pprint(vividict, width=40)

Вывод:

{'fruit': ['apple', 'banana'],
 'vegetable': ['carrot', 'lettuce']}
0 голосов
/ 05 ноября 2019

Попробуйте использовать:

with open('file.txt', 'r') as f:
    lines = [line.rstrip().split(': ') for line in f]
    print({k: [line[0] for line in lines if line[1] == k] for _, k in lines})
...