Вопрос:
Как я могу взять данные из текстового файла в следующем формате:
abc 5 defg 8 ghi 58 jklmn 450 opqrstuv 8456
И добавьте его в словарь. Например: первым будет словарь [‘abc’] = 5, последним будет словарь [‘opqrstuv’] = 8456 и т.д. Мне нужно добавить все данные (каждая строка в текстовом файле)
Лучший ответ:dictionary = {} with open(‘path/to/file’) as infile: for line in infile: key,value = line.split(» «) dictionary[key] = int(value)
Другими словами, прочитайте файл за строкой и установите dict так, чтобы каждая клавиша была областью перед одиночным пространством, и каждое значение является областью после этого одиночного пробела, переданного как int.
Если у вас всегда будут LETTERS NUMBERS вы можете сделать это с помощью регулярных выражений, но это кажется излишне сложным.
Как всегда со словарными сопоставлениями, попробуйте подумать о том, что вам нужно, как стандартное поведение, если клавиши сталкиваются, например, если я прочитал «abc 5» но уже имел «abc 10» ранее в файле, поэтому dictionary[«abc»] существует.
(Если вам нравится, вот решение регулярного выражения уродливого ад-ада:
import re from operator import itemgetter as iget with open(‘path/to/file’) as infile: data = infile.read() # UGH re_data = re.findall(r»([^ds]+)|([d]+)», data) dictionary = dict(zip( map(iget(0),re_data[0::2]),map(int,map(iget(1),re_data[1::2])) )) # DOUBLE UGH. As a rule of thumb, if you’re using three map # functions in one line, REFACTOR. Ответ №1dictionary={} with open(‘file.txt’,’r’) as f: for line in f.readlines(): a,b = line.split() dictionary[a] = int(b)