Превратите ключи словаря в имена переменных с одинаковыми значениями в Python из файлов .mat Matlab с помощью scipy.io.loadmat
Вопрос
Я пытаюсь взять базовый словарь 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']
, если бы вы знали все имена переменных заранее, вы могли бы написать функцию для извлечения их в отдельные переменные: