Распечатать словарь из файла - PullRequest
0 голосов
/ 14 октября 2019
E;Z;X;Y

Я пытался

    dl= defaultdict(list)
    for line in file:
        line = line.strip().split(';')
        for x in line:
            dl[line[0]].append(line[1:4])
    dl=dict(dl)

    print (votep)

Он выводит слишком много результатов. У меня есть init, который читает файл.

Какие способы я могу отредактировать, чтобы он работал?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Модуль csv здесь может быть очень удобен, просто используйте точку с запятой в качестве разделителя, и вам будет достаточно простого понимания:

with open('filename.txt') as file:
    reader = csv.reader(file, delimiter=';')
    votep = {k: vals for k, *vals in reader}
    print(votep)

Без использования csv вы можете просто использовать str.split:

with open('filename.txt') as file:
    votep = {k: vals for k, *vals in (s.split(';') for s in file)}
    print(votep)

Дальнейшее упрощение без понимания это выглядело бы следующим образом:

votep = {}
for line in file:
    key, *vals = line.split(';')
    votep[key] = vals

И, к вашему сведению, key, *vals = line.strip(';') - это просто присвоение нескольких переменных в сочетании с повторяемой распаковкой. Звезда означает только то, что все, что осталось в итерируемом элементе, заносится в значения после присвоения первому значению ключа.

0 голосов
/ 14 октября 2019

если вы читаете файл в объекте списка, существует простая функция для итерации и преобразования его в ожидаемый словарь:

a = [
    'A;X;Y;Z',
    'B;Y;Z;X',
    'C;Y;Z;X',
    'D;Z;X;Y',
    'E;Z;X;Y',
    ]

def vp(a):
    dl = {}
    for i in a:
        split_keys = i.split(';')
        dl[split_keys[0]] = split_keys[1:]
    print(dl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...