Python。将字符串转换为包含 numpy 数组的字典

时间:2021-02-22 17:53:20

标签: python python-3.x numpy

我有一个具有以下结构的字符串:

{0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2]), 1: [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5]), 2: [array([6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}

它是包含 numpy 数组的 python 字典的形式。 如何将此字符串转换为包含 numpy 数组的 python 字典?

感谢您的回复。我不能简单地更改字符串,因为该字符串是我想通过管道传输到另一个文件的 python 文件的输出。我可以去更改此输出的格式,但我更希望避免这种情况。

2 个答案:

答案 0 :(得分:0)

在交互式 ipython 会话中创建一个别名: 在 [7] 中:array = np.array

并编辑了您的样本的复制粘贴。我不得不添加几个结束 ]:

In [8]: data = {0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2])], 1
   ...: : [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5])], 2: [array(
   ...: [6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}

现在一个简单的执行工作:

In [9]: data
Out[9]: 
{0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2])],
 1: [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5])],
 2: [array([6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}

或带有字符串(已更正):

In [10]: astr="{0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2])], 1
    ...: : [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5])], 2: [array
    ...: ([6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}"
In [11]: astr
Out[11]: '{0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2])], 1: [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5])], 2: [array([6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}'

我可以执行 execeval

In [15]: eval(astr)
Out[15]: 
{0: [array([5.1, 3.5, 1.4, 0.2]), array([4.9, 3. , 1.4, 0.2])],
 1: [array([7. , 3.2, 4.7, 1.4]), array([6.4, 3.2, 4.5, 1.5])],
 2: [array([6.3, 3.3, 6. , 2.5]), array([7.1, 3. , 5.9, 2.1])]}

通常不鼓励使用 eval,因为它可能被黑客入侵。但是更安全的 ast_eval 只适用于字典、列表和元组,而不适用于 np.array。您必须以一种或多种方式编辑字符串,使其成为有效的 Python/numpy 表达式。

答案 1 :(得分:0)

我更改了字符串的生成方式,使其采用包含 python 列表而不是 numpy 数组的字典形式。 有了这个,我就可以使用 ast.literal_eval() 来反序列化它。

相关问题