我是iPython的新用户。我经常处理从(例如)netcdf文件加载的大型数据集。我将数据加载到字典中,并希望能够以交互方式查询与字典关联的键,它们的形状,数据类型以及它们在内存中占用的大小。
例如,我有一个名为" dat"的dict,它有许多与之关联的键:In [21]: dat.keys()
Out[21]:
['Yp1',
'diag_levels',
'PHIHYD',
'iter',
'UVEL',
'VVEL',
'T',
'THETA',
'Y',
'X',
'Xp1',
'WVEL',
'RHOAnoma']
我知道我可以使用Numpy的
查询每个键以获得它们的形状np.shape(dat['Yp1'])
但是我想知道是否有一个函数可以一次性完美地返回它,类似于" whos",但这实际上会查询字典。
感谢您的帮助。
答案 0 :(得分:0)
我的第一次尝试是列表理解(普通Python)
[dat[x].shape for x in dat]
我没有netcdf
(h5yp
?)字典来测试这个,所以可能会出错。但我认为这是一个直接的字典/价值问题。
词典理解:
{x: dat[x].shape for x in dat}
将提供一个很好的字典配对名称和形状。
可以通过列表添加其他属性。它们甚至可以被格式化。
{k: [v.shape, v.dtype, v.size] for k,v in dat.items()}
{k: '%s: %s elems, %r'%(v.shape,v.size,v.dtype) for k,v in dd.items()}
对于更漂亮的显示器,您可以查看whos
代码,并拉出相关部分以制作自己的魔法
whos??
def whosdict( x, header='' ):
# a formatted display modeled on common object __str__ methods
lines = [header]
for k,v in x.items():
aline = '%s\t\t%s: %s elems, %r'%(k, v.shape,v.size,v.dtype)
lines.append(aline)
astr = '\n'.join(lines)
# could print instead of return string
return astr
可以用作
In [342]: print(whosdict(dd, 'dd dictionary'))
dd dictionary
x (4,): 4 elems, dtype('int32')
y (3, 4): 12 elems, dtype('float64')