Python 基于括号拆分字符串
对于我正在开发的程序,我有一个文本文件,其中包含类似以下内容:Python 基于括号拆分字符串,python,string,python-3.x,Python,String,Python 3.x,对于我正在开发的程序,我有一个文本文件,其中包含类似以下内容: {0: {2: 1, 1: 1}, 1: {2: 1, 0: 1}, 2: {0: 1, 1: 1}} 其中,第一个数字本质上是节点的索引,下面是该节点所连接的后续节点及其权重的列表。我想知道最好的方法是抓住一对{}中的单个集合,所以我最终会得到这样的结果: 0: {2: 1, 1: 1} 1: {2: 1, 0: 1} 目前,我的计划是找到第一个冒号的索引,并将开括号和该冒号之间的内容作为ID,然后找到下一个开括号和后面的冒号
{0: {2: 1, 1: 1}, 1: {2: 1, 0: 1}, 2: {0: 1, 1: 1}}
其中,第一个数字本质上是节点的索引,下面是该节点所连接的后续节点及其权重的列表。我想知道最好的方法是抓住一对{}中的单个集合,所以我最终会得到这样的结果:
0:
{2: 1, 1: 1}
1:
{2: 1, 0: 1}
目前,我的计划是找到第一个冒号的索引,并将开括号和该冒号之间的内容作为ID,然后找到下一个开括号和后面的冒号,以获得下面的节点集。但是,对于更大的列表来说,这很快变得复杂,我想知道是否有更好的方法(还是真的很幸运?),您的格式是有效的python文本dict of dict
所以你只需要:
- 使用
完成繁重的工作并创建字典ast.literal\u eval
- 遍历已排序的项,并根据所需的格式打印(注意,内部字典的排序是任意的,如果要控制它,必须再次对已排序的元素执行另一个循环)
0
{1: 1, 2: 1}
1
{0: 1, 2: 1}
2
{0: 1, 1: 1}
请注意,json.loads
在这里不起作用,因为json
需要在数据集中使用双引号字符串。其他数据类型不兼容
更一般地说,如果您有其他分隔符,因此它不适用于
ast.literal\u eval
或json
,则有一个名为pyparsing的嵌套解析器模块,您很幸运(或者真的很幸运?),您的格式是有效的python literal dict of dicts
所以你只需要:
- 使用
ast.literal\u eval
完成繁重的工作并创建字典
- 遍历已排序的项,并根据所需的格式打印(注意,内部字典的排序是任意的,如果要控制它,必须再次对已排序的元素执行另一个循环)
代码:
结果:
0
{1: 1, 2: 1}
1
{0: 1, 2: 1}
2
{0: 1, 1: 1}
请注意,json.loads
在这里不起作用,因为json
需要在数据集中使用双引号字符串。其他数据类型不兼容
更一般地说,如果您有其他分隔符,因此它不适用于ast.literal\u eval
或json
,则有一个能够嵌套的解析器模块,名为pyparsing
ast.literal\u eval
ast.literal\u eval