Python - 如何在循环中创建字典的字典

5

我正在尝试从文件中生成一张城市图。 每个readline()都会返回三个值:abcab是城市名称的字符串,c是整数,表示ab之间的路径成本。 我该如何存储abc以便得到类似于

graph = {
          'a1': {'b1': c1, 'b1': 5, 'a2': c2},
          'a2': {'a1': c2},
          'b1': {'a1': c1},
        }

以下是我的代码的一部分:

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

......既然我不知道字典中是否已经存在该关键字,如果字典中不存在该关键字,则我会尝试添加一个带有空值的关键字dict.keys(),但是update()将会产生一个奇怪的列表。

我是python新手,请告诉我如何创建这样一个不包含任何[]符号的图表。非常感谢!

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

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

2个回答

3
您可以使用以下循环,在两个方向上设置graph字典:
graph = {}
for line in file:
    a, b, c = line.rstrip().split(', ')
    graph.setdefault(a, {})[b] = c
    graph.setdefault(b, {})[a] = c

所以,给定文件内容:

Arlington, Chelmsford, 4
Arlington, Berkshire, 10
Chelmsford, Berkshire, 5

graph会变成:

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


1
这是一个利用内置库的示例。`defaultdict` 确保如果字典中不存在某个键,则会创建该键并赋予默认值...在本例中,是一个空字典。`csv` 模块可用于读取和解析逗号分隔的输入。
from collections import defaultdict
import csv

D = defaultdict(dict)

with open('input.csv',newline='') as f:
    r = csv.reader(f)
    for a,b,c in r:
        D[a][b] = int(c)
        D[b][a] = int(c)

print(dict(D)) # dict() is unnecessary, but prints better than the defaultdict object

输入:

Arlington,Chelmsford,4
Arlington,Berkshire,10
Chelmsford,Berkshire,5

输出:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接