python - 以有效的方式将字典中的所有项目作为参数传递
问题描述
我有一个包含十个 Pandas 数据帧的字典,我想使用 Numpy 堆叠这些数据帧。我可以做到这一点的一种方法是键入:
tensor = numpy.stack((dict[0],dict[1],...,dict[9]),axis=0)
然而,随着字典中项目数量的增加,这变得非常令人厌烦。有没有办法一次传递所有字典项,而不是像上面那样手动输入每个元素?
以下使用解包的尝试给了我一个“TypeError:stack() 关键字必须是字符串”错误:
tensor = numpy.stack(**dict,axis=0)
什么是解决此问题的有效且 Pythonic 的方法?
解决方案
**dict
用于接受关键字参数的函数。它将字典解包成一组key=value
参数。例如:
像您这样使用整数作为键的字典:
In [157]: dd = {0:np.arange(3),1:np.arange(10,13)}
一个功能:
In [158]: def foo(**kwargs):
...: print(kwargs)
...:
你的错误:
In [159]: foo(**dd)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-159-965b46c2342b> in <module>
----> 1 foo(**dd)
TypeError: foo() keywords must be strings
它不想做:foo(0=..., 1=...)
。
如果我使用有效变量名的字符串参数定义字典:
In [160]: dd = {'key0':np.arange(3),'key1':np.arange(10,13)}
In [161]: foo(**dd)
{'key0': array([0, 1, 2]), 'key1': array([10, 11, 12])}
这样就解释了直接错误。
但这仍然不适stack
用于具有签名的:
np.stack(arrays, axis=0, out=None)
我可以使用字典来提供关键字参数,但不能提供arrays
参数:
In [165]: pdict = {'axis':0, 'out':None}
In [166]: alist = [np.arange(3), np.arange(10,13)]
In [167]: np.stack(alist, **pdict)
Out[167]:
array([[ 0, 1, 2],
[10, 11, 12]])
用数字键返回字典。我可以用来.values
从字典中提取数组,并将其作为列表传递给stack
:
In [171]: dd = {0:np.arange(3),1:np.arange(10,13)}
In [172]: list(dd.values())
Out[172]: [array([0, 1, 2]), array([10, 11, 12])]
In [173]: np.stack(list(dd.values()))
Out[173]:
array([[ 0, 1, 2],
[10, 11, 12]])
推荐阅读
- arrays - 将数组分配给数组
- javascript - 一键实现两个动作 laravel
- python - Matplotlib 极坐标散点图不显示所有点
- sql - 在 SQL Server 中获取 0.00 十进制值
- wordpress - 如何在 Wordpress 中设置现有产品属性的值?
- c++ - 如何检查已经存在的#include 文件
- android - workmanager 定期请求在没有设置弹性周期的情况下不起作用
- typescript - 如何设置没有值的数字类型变量
- android - 在 Google Play 控制台上更新应用时出现错误
- substrate - 如何检查“墨水”的“储值”!在最新的“Polkadot/Substrate Portal”中