Python - 指向边缘列表到字典字典

时间:2013-12-26 15:24:31

标签: python data-structures dictionary graph

我在

格式的文件中有一个有向边的列表
Source_Id  Target_Id    Edge_Type
A          B            Train
A          C            Bus
B          D            Bus
C          A            Train
...        ...

我想在字典词典中构建数据,例如:

{'A': {'B': 'Train', 'C': 'Bus'}, 'B': {'D': 'Bus'}, 'C': {'A': 'Train'}}

最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

使用collections.defaultdict()对象为您实现值:

from collections import defaultdict
import csv

graph = defaultdict(dict)

with open('inputfile', 'rb') as infh:
    reader = csv.reader(infh, delimiter='\t')
    next(reader, None)  # skip header

    for source, target, edge in reader:
        graph[source][target] = edge

这假设每个源和目标之间只有一条边,并且输入文件是制表符分隔的。

如果有多条边,请改为构建边名的列表:

graph = defaultdict(lambda: defaultdict(list))

with open('inputfile', 'rb') as infh:
    reader = csv.reader(infh, delimiter='\t')
    next(reader, None)  # skip header

    for source, target, edge in reader:
        graph[source][target].append(edge)

给你

{'A': {'C': ['Bus'], 'B': ['Train']}, 'C': {'A': ['Train']}, 'B': {'D': ['Bus']}}

然后边缘列表可以表示更多边缘名称。