Python словарь из файла - PullRequest
       43

Python словарь из файла

1 голос
/ 13 апреля 2020

Я пытаюсь сделать все в моем python коде с пониманием. Мне пришлось преобразовать данные файла .txt в dict. Выглядело это так:

A   .-
B   -...
C   -.-.
...

Да, это азбука Морзе.

Мой код выглядит так:

def morse_file_to_dict(filename):
    d = {}
    for line in open(filename):
        ch, sign = line.strip().split('\t')
        d[ch] = sign
    return d

Он возвращает нормальный диктант, подобный этому:

{'A': '.-', 'B': '-...', 'C': '-.-.', ... }

Мой вопрос, могу ли я сделать это в одну строку ? С пониманием ?

Спасибо за ваше время и ответ!

Ответы [ 2 ]

4 голосов
/ 13 апреля 2020

Ваша функция может стать:

def morse_file_to_dict(filename):
    with open(filename) as fh:    
        return dict(l.strip().split() for l in fh)

Это позволяет создать диктат из кортежей.

Если есть вероятность, что имеется более двух полей, вам следует использовать:

def morse_file_to_dict(filename):
    with open(filename) as fh:    
        return dict(l.strip().split("\t", 1) for l in fh)

Этот второй пример специально устанавливает параметры sep и maxsplit str.split

1 голос
/ 13 апреля 2020

Не понимание, но самое короткое:

dict(map(str.split, open(filename)))

Генератор, поданный на dict

dict(kv.split() for kv in open(filename))

Понимание Dict будет грязным, потому что у вас нет состояния, чтобы извлечь разделение, поэтому вы должны рассчитать его дважды

{kv.split()[0]: kv.split()[1] for kv in open(filename)}
...