创建一个包含逗号分隔值对的字典字典

0 投票
1 回答
1124 浏览
提问于 2025-04-18 12:17

我有一个很大的文本文件,里面的数据格式是这样的:

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/

1 个回答

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}

或者其他方法——其实你可以把这些都写在一行里,但其实没必要。)

撰写回答