我有1个文件,里面有2个数组(x和y)。 这是字典键:
dict_keys(['__version__', 'x', '__header__', 'y', '__globals__'])
这些是我编写的用于在没有dict_keys的情况下调用我的数组的指令:
x=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['x']
y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['y']
有没有办法只使用一行代码执行此操作?
到目前为止,我已经尝试过这个但没有成功:
x_y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')['x']['y']
x_y=(sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x','y']))
x_y=sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x']['y'])
x_y=(sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')(['x']['y']))
答案 0 :(得分:3)
在一行中执行此操作真的很重要吗?想要只调用一次loadmat()
是有意义的,但坚持一行似乎是不必要的。这看起来非常简单:
features = sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat')
x = features['x']
y = features['y']
答案 1 :(得分:1)
如果你坚持单行,这将有效:
x_y = {k:v for (k, v) in sio.loadmat('C:/Users/rocio/Documents/Python Scripts/SLEEP/SLEEP_F4/FeaturesAll/AWA_FeaturesAll.mat').items() if k in {'x', 'y'}}
(需要Python 3.x或2.7)
它只运行loadmat
一次,然后使用字典理解循环其内容,只选择(k, v)
对中k
(密钥)包含在集合{'x', 'y'}
中1}}。
它是一个MAT文件并不重要。它适用于.items()
方法的行为类似于dict.items()
的任何对象。
如果您仍在使用Python 2.7,则可能希望将.items()
替换为.iteritems()
以获得更好的性能。