【问题标题】:iPython query keys/shape/size in dictionary (whos for a dictionary)字典中的 iPython 查询键/形状/大小(字典中的 whos)
【发布时间】:2015-10-08 00:19:00
【问题描述】:

我是 iPython 的新用户。我经常处理从(例如)netcdf 文件加载的大型数据集。我将数据加载到字典中,并希望能够以交互方式查询与字典关联的键、它们的形状、数据类型以及它们在内存中占用的大小。

例如,我有一个名为“dat”的字典,它有许多与之关联的键:

In [21]: dat.keys()
Out[21]: 
['Yp1',
 'diag_levels',
 'PHIHYD',
 'iter',
 'UVEL',
 'VVEL',
 'T',
 'THETA',
 'Y',
 'X',
 'Xp1',
 'WVEL',
 'RHOAnoma']

我知道我可以使用 Numpy's 查询每个键以获取它们的形状

np.shape(dat['Yp1'])

但我想知道是否有一个函数可以一次性返回所有格式良好的内容,例如“whos”,但实际上会查询字典。

感谢您的帮助。

【问题讨论】:

    标签: numpy dictionary ipython


    【解决方案1】:

    我的第一次尝试是列表理解(普通 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')
    

    【讨论】:

    • 谢谢!这很棒,也是我想要的很好的一部分。有没有办法添加键的数据类型和大小(字节)? (是的,netcdf 参考不相关)(编辑:我试过 {x: dat[x].dtype: dat[x].shape for x in dat} 但第二个冒号有问题)
    • 谢谢谢谢...这正是我所追求的。
    • 好吧——还有一件事,这太棒了,我想把它写成一个函数。我有这样的东西: def whosdict( x ): str = {k: '%s: %s elems, %r'%(v.shape,v.size,v.dtype) for k,v in x.items ()} 打印(str) 返回;但是 print 语句删除了换行符 - 我怎样才能将它们保留在输出中?谢谢!
    • 谢谢!我从你的例子中学到了很多,这完全解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2021-05-08
    • 1970-01-01
    • 2021-04-08
    • 2021-12-02
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多