#python #python-3.x #python-2.7 #dictionary #key
#python #python-3.x #python-2.7 #словарь #Клавиша
Вопрос:
Я пытаюсь сделать следующее:
У меня есть файл, который может содержать любое количество строк и столбцов (что означает, что количество строк / столбцов во входном файле не является фиксированным). Также обратите внимание, что могут быть повторяющиеся точки (что допустимо). Формат входного файла выглядит следующим образом:
Point Sample1_X_Coordinate Sample1_Y_Coordinate Sample2_X_Coordinate Sample2_Y_Coordinate and so on`
A 20 10 18 9
B 16 13 15 13
A 21 11 19 9
C 8 5 8 4
Мне нужно сохранить этот файл во что-то вроде следующего для выполнения дополнительных манипуляций (добавление псевдокода, поскольку я новичок в Python):
outputdata[this_sample][this_point].append((this_sample_point_X_coordinate, this_sample_point_Y_coordinate))
то есть данные, которые будут сохранены следующим образом:
outputdata[Sample1][A] = list[(20,10), (21,11)]
outputdata[Sample2][A] = list[(18,9), (19,9)]
Как я могу реализовать вышеуказанное в Python?
Спасибо!
Ответ №1:
это можно сделать, открыв файл, прочитав построчно и разделив строки пробелами. Словарь сложно инициализировать, но с объектами defaultdict это довольно просто. Например:
from collections import defaultdict
# Instantiate a dictionary which assumes dictionary of lists if the key does not exist
point_dict = defaultdict(lambda: defaultdict(list))
with open('textfile.txt') as f:
for line in f.readlines():
# Split line using space as delimeter and remove new line character:
point, x1, y1, x2, y2 = line.replace('n', '').split(' ')
point_dict['Sample1'][point].append((int(x1), int(y1)))
point_dict['Sample2'][point].append((int(x2), int(y2)))
Это приводит к:
point_dict['Sample1']
Out[13]: defaultdict(list, {'A': [(20, 10), (21, 11)], 'B': [(16, 13)], 'C': [(8, 5)]})
point_dict['Sample2']
Out[12]: defaultdict(list, {'A': [(18, 9), (19, 9)], 'B': [(15, 13)], 'C': [(8, 4)]})
point_dict['Sample1']['A']
Out[14]: [(20, 10), (21, 11)]