Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于括号拆分字符串_Python_String_Python 3.x - Fatal编程技术网

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