1

我正在从系统中的文件中读取字符串。字符串如下:

A -> B [ label="5.000" ];
B -> A [ label="-5.000" ];

我想填充一个 setnode和 dictionary adj。这是我的代码:

node = set()
adj = {}
with open("tiny_stn.dot",'r+t') as demofile:
    lines = demofile.readlines()
    node = {line.split()[0] for line in lines if "->" in line}
    adj = {line.split()[2]:line.split('"')[1] for line in lines if '->' in line}

我想要集合node={'A','B'}和字典adj={'A':{'B': 5.000}, 'B':{'A': -5.000}}

填充集合工作正常。挑战是在字典中填充字典。最后一行代码给了我所需字典的内部字典,即'B': 5.000作为第一个元素。

任何帮助表示赞赏。

4

1 回答 1

0

我不建议使用字典理解,因为它可能很难阅读。

鉴于这些行具有特定的架构,我建议使用正则表达式:

import re

node = set()
adj = {}
with open("tiny_stn.dot",'r+t') as demofile:
    lines = demofile.readlines()
    for line in lines:
        result = re.search(r"(.+) -> (.+) \[ label=\"(.+)\" \];", line)
        src, dest, weight = result.groups()
        node.add(src)
        node.add(dest)
        if src not in adj:
            adj[src] = {}
            adj[src][dest] = float(weight)
# Prints {'A': {'B': 5.0}, 'B': {'A': -5.0}}
print(adj)
于 2022-03-05T02:57:37.137 回答