python - Python。将字符串转换为包含 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 文件的输出。我可以去改变这个输出的格式,但我宁愿避免这种情况。
解决方案
在交互式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])]}'
我可以做一个exec
或eval
:
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
只适用于 dict、list 和 tuples,而不适用于np.array
. 您必须以一种或其他方式编辑字符串,使其成为有效的 Python/numpy 表达式。
推荐阅读
- c++ - 带有就地多态容器的 std::launder
- html - 如何在 Bootstrap 中对齐相邻列的高度
- c# - 使用 web.config 配置 Serilog 文件
- flutter - 即使位置是静态的(颤振),位置 onChange 函数也会不断被调用
- python - Python:将固定数组乘以元素方式的第二个数组
- python - kivy在后台运行功能
- javascript - 用d3+react画一条路径(折线图)
- html - 我正在尝试在垂直 flex div 中并排制作按钮
- angular - 在迭代表角度 8 中显示复选框的值
- ios - 如何从呈现的 ViewController 推送?