我有一个大文本文件,其中的数据格式如下:
1 80,982 163,8164 170,2620 145,648 2 42,1689 127,9365 3 57,1239 101,3381 43,7313 41,7212 4 162,3924
所以每一行都以1,2,3等开头,然后是逗号分隔的值对,用空格分隔
我想创建一个如下所示的字典:
{'1':{'80':982, '163':8164, '170':2620, '145':648}, '2':{'42':1689, '127':9365}, '3':{'57':1239, '101':3381, '43':7313, '41':7212}, '4':{'162':3924} }
等等。这是使用Dijkstra的算法,如下所述:http://code.activestate.com/recipes/119466-dijkstras-algorithm-for-shortest-paths/
答案 0 :(得分:1)
看起来很简单:
d = {}
with open("data.dat") as fp:
for line in fp:
parts = line.split()
d[parts[0]] = dict(part.split(",") for part in parts[1:])
给出
>>> d
{'4': {'162': '3924'}, '1': {'170': '2620', '163': '8164', '80': '982', '145': '648'}, '3': {'43': '7313', '41': '7212', '57': '1239', '101': '3381'}, '2': {'42': '1689', '127': '9365'}}
(如果你真的希望最里面的值是整数,你可以使用
subparts = [part.split(",") for part in parts[1:]]
d[parts[0]] = {k: int(v) for k,v in subparts}
或者其他东西 - 你可以在一行中完成所有这些但是没有必要。)