**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]])