字典中的iPython查询键/形状/大小(字典中的whos)

时间:2015-10-08 00:19:01

标签: numpy dictionary ipython

我是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",但这实际上会查询字典。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我的第一次尝试是列表理解(普通Python)

[dat[x].shape for x in dat]

我没有netcdfh5yp?)字典来测试这个,所以可能会出错。但我认为这是一个直接的字典/价值问题。

词典理解:

{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')