对于我正在处理的程序,我有一个包含类似内容的文本文件:
{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}
目前我的计划是找到第一个冒号的索引,并将open括号和冒号之间的内容作为ID,然后找到下一个打开的括号并跟随冒号获取以下一组节点但是它很快对于更大的列表变得复杂,并且想知道是否有更好的方法
答案 0 :(得分:6)
你很幸运(或者真的好运吗?),你的格式是有效的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))
结果:
0
{1: 1, 2: 1}
1
{0: 1, 2: 1}
2
{0: 1, 1: 1}
请注意json.loads
在此不起作用,因为json
需要数据集中的双引号字符串。其他数据类型不兼容。
更一般地说,如果您有其他分隔符,因此它不适合ast.literal_eval
或json
,则可以使用名为pyparsing
的嵌套功能解析器模块。