我在
格式的文件中有一个有向边的列表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'}}
最好的方法是什么?
答案 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']}}
然后边缘列表可以表示更多边缘名称。