Python-эквивалент массива структур из MATLAB - PullRequest
0 голосов
/ 15 мая 2018

Мне знакома конструкция struct из MATLAB, в частности, массив структур. Я пытаюсь сделать это со словарем в Python. Скажем, у меня есть инициализированный словарь:

samples = {"Name":"", "Group":"", "Timeseries":[],"GeneratedFeature":[]}

и мне предоставлен еще один словарь под названием fileList, ключи которого - это имена групп, а каждое значение - это набор путей к файлам. Каждый путь к файлу будет генерировать один образец в samples путем заполнения элемента Timeseries. В дальнейшем некоторая обработка составит GeneratedFeature. Часть имени будет определена путем к файлу.

Поскольку я не знаю содержимого fileList априори, в MATLAB, если samples, это struct, а fileList - просто массив ячеек:

fileList={{'Group A',{'filepath1','filepath2'}};{'Group B',{'filepath1', 'filepath2'}}}

Я бы просто установил счетчик k=1, запустил цикл for (с другим индексом) и сделал бы что-то вроде:

k=1;
for i=1:numel(fileList)
    samples(k).Group=fileList{i}{1};
    for j=1:numel(fileList{i}{2})
        samples(k).Name=makeNameFrom(fileList{1}{2}{j})
        .
        .
    end
    k=k+1
end

Но я не знаю, как это сделать на python. Я знаю, что могу сохранить два для подхода петли с

for (group, samples) in fileList:
   for sample in samples:

Но как сказать python, что сэмплам разрешено быть массивом / списком? Есть ли более питонический подход, чем для цикла?

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете сохранить свой словарь в списке и просто добавлять новые словари на каждой итерации цикла:

samplelist = []
samplelist.append(samples.copy()) % dictionary copy needed when duplicating

Доступ к элементам в списке будет работать следующим образом (например, поле «Имя» i-го образца):

samples_i_name = samplelist[i]["Name"]

Список всех имен будет доступен для простого понимания списка:

namelist = [samplelist[i]["Name"] for i in range(len(samplelist))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...