python - 如何在循环中创建字典字典

Biy*_*ang 5 dictionary graph python-3.x

我正在尝试从文件生成城市图。每个readline()我都得到三个值ab、 和ca并且b是字符串,城市名称,cint,之间的路径成本ab。我如何存储a, b,c以便我得到类似的东西

graph = {
          'a1': {'b1': c1, 'b1': 5, 'a2': c2},
          'a2': {'a1': c2},
          'b1': {'a1': c1},
        }
Run Code Online (Sandbox Code Playgroud)

这是我的代码的一部分:

dict = dict()   #dictionary for storing values
while (True):
    new_path = file.readline()
    if new_path == "":
        break
    new_path = new_path.rstrip().split(", ")
    a = new_path[0][2:len(new_path[0]) - 1] #start town
    b = new_path[1][1:len(new_path[1]) - 1] #end town
    c = new_path[2][0:len(new_path[2]) - 1] #path cost
    print(a+" "+b+" "+c)   #this prints Arlington Chelmsford 4
Run Code Online (Sandbox Code Playgroud)

....... 因为我不知道该键是否已经在字典中,所以如果键不在,我尝试添加具有空值的键dict.keys(),但随后update()会奇怪地运行并给我某种列表。我是 python 新手,所以请向我解释如何创建这样一个不包含任何[]符号的图形。谢谢一百万!

我想要的最终结果是这样的:

{'Arlington': {'Chelmsford': 4, 'Berkshire': 10}, 'Chelmsford': {'Arlington': 4, 'Berkshire': 5}, 'Berkshire': {'Arlington': 10, 'Chelmsford': 5}}

blh*_*ing 3

您可以使用以下循环graph在两个方向上设置字典:

graph = {}
for line in file:
    a, b, c = line.rstrip().split(', ')
    graph.setdefault(a, {})[b] = c
    graph.setdefault(b, {})[a] = c
Run Code Online (Sandbox Code Playgroud)

这样给定的文件内容:

Arlington, Chelmsford, 4
Arlington, Berkshire, 10
Chelmsford, Berkshire, 5
Run Code Online (Sandbox Code Playgroud)

graph会成为:

{'Arlington': {'Chelmsford': '4', 'Berkshire': '10'}, 'Chelmsford': {'Arlington': '4', 'Berkshire': '5'}, 'Berkshire': {'Arlington': '10', 'Chelmsford': '5'}}