Превратите ключи словаря в имена переменных с одинаковыми значениями в Python из файлов .mat Matlab с помощью scipy.io.loadmat

StackOverflow https://stackoverflow.com/questions/6369535

Вопрос

Я пытаюсь взять базовый словарь temp= {'key': array ([1,2])}, загруженный из файла .mat с помощью scipy.io.loadmat.Превратите ключи в файле словаря Python, возвращаемом loadmat (), в имена переменных со значениями, такими же, как представляющие ключи.

Так, например:

родовое слово

превратился в

родовое слово

Я знаю, как получать ключи с помощью temp.keys ().Тогда захватить элементы легко, но как мне заставить список строк в temp.keys () быть именами переменных, а не строками.

Надеюсь, в этом есть смысл, но, вероятно, это действительно просто, я просто не могу придумать, как это сделать.

Ура

Это было полезно?

Решение

В python параметры метода можно передавать в виде словарей с помощью магического кода **:

родовое слово

Другие советы

Лучшее, что можно сделать, - это использовать общий кодовый код.Однако, чтобы ответить на этот вопрос, вы можете использовать функцию temp['key'].Преимущества такого подхода заключаются в том, что вам не нужно жестко кодировать имена переменных или ограничиваться работой внутри функции.

родовое слово

ПРИМЕЧАНИЕ. Это будет работать, только если вы импортировали определенную функцию из модулей.Если вы не хотите этого делать из-за практики кода или огромного объема функций, которые вам нужно будет импортировать, вы можете написать функцию для объединения имени модуля перед записью.Вывод такой же, как и в предыдущем примере.

родовое слово

Хотя это не лучший способ кодирования, он хорошо работает для всех тестируемых мной примеров.

Возможно, лучше поместить данные в отдельный объект:

родовое слово

Это примерно так же легко использовать в интерактивном режиме и не требует никакого волшебства. Это должно быть нормально и для пользователей Matlab.

РЕДАКТИРОВАТЬ : оказывается, что описанное ниже в большинстве случаев не работает.Жаль, хватит магии.

Если вы хотите вмешаться в магию, вы можете сделать что-нибудь вроде

родовое слово

Это будет прекрасно работать в интерактивном режиме, и вы даже можете скрыть доступ к locals() внутри функции загрузчика, возясь с sys._getframe().f_back.f_locals.

Однако это не будет работать в функциях:

родовое слово

Дело в том, что указанный выше a привязан к глобальной переменной во время компиляции, и поэтому Python не пытается найти его среди локальных переменных.

Хотя я бы просто рекомендовал использовать словарь напрямую и обращаться к таким массивам, как temp['key'], если бы вы знали все имена переменных заранее, вы могли бы написать функцию для извлечения их в отдельные переменные:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top