Rip*_*pIt 0 python string python-3.x
对于我正在处理的程序,我有一个包含类似于此的文本文件:
{0: {2: 1, 1: 1}, 1: {2: 1, 0: 1}, 2: {0: 1, 1: 1}}
Run Code Online (Sandbox Code Playgroud)
其中第一个数字是节点的索引,以下是此节点连接的后续节点列表及其权重.我想知道最好的方法是能够抓住一对{}中包含的单个集合,所以我最终会得到这样的结果:
0:
{2: 1, 1: 1}
1:
{2: 1, 0: 1}
Run Code Online (Sandbox Code Playgroud)
目前我的计划是找到第一个冒号的索引,并将open括号和冒号之间的内容作为ID,然后找到下一个打开的括号并跟随冒号获取以下一组节点,但它很快变得复杂更大的列表,并想知道是否有更好的方法
你运气好(或者真的好运吗?),你的格式是有效的python文字词典.
所以你必须:
ast.literal_eval做繁重的任务和创建类型的字典词典码:
import ast
s = "{0: {2: 1, 1: 1}, 1: {2: 1, 0: 1}, 2: {0: 1, 1: 1}}"
dict_of_dicts = ast.literal_eval(s)
for k,v in sorted(dict_of_dicts.items()):
print("{}\n{}".format(k,v))
Run Code Online (Sandbox Code Playgroud)
结果:
0
{1: 1, 2: 1}
1
{0: 1, 2: 1}
2
{0: 1, 1: 1}
Run Code Online (Sandbox Code Playgroud)
请注意,json.loads这在此处不起作用,因为json数据集中需要双引号字符串.其他数据类型不兼容.
更一般地说,如果你有其他分隔符,因此它不适合ast.literal_eval或者json,有一个支持嵌套的解析器模块pyparsing.