我有一个包含跟随者 - 跟随者信息的字典。例如:
a --> b,c,d
b --> c,d
c --> d
这意味着,a跟随b,c,d。 b跟随c,d。 c跟随d。我有以下相应的字典:
{'a': ['b', 'c', 'd'], 'b': ['c', 'd'], 'c': ['d']}
我想在igraph
中的字典中创建定向图表。
我目前正在做的是:
import igraph
d = {'a': ['b', 'c', 'd'], 'b': ['c', 'd'], 'c': ['d']}
edges = []
vertices_set = set()
for key in d:
vertices_set.add( key )
for item in d[key]:
edges.append( (key, item) )
vertices_set.add( item )
# vertices_set: set(['a', 'c', 'b', 'd'])
# edges: [('a', 'b'), ('a', 'c'), ('a', 'd'), ('c', 'd'), ('b', 'c'), ('b', 'd')]
g = igraph.Graph( directed=True )
g.add_vertices( len(vertices_set) )
g.vs['name'] = list(vertices_set)
g.add_edges( edges )
print(len(g.vs))
print(len(g.es))
此代码按预期工作。然而,正如你所看到的那样,它相当丑陋(并且很可能比它应该的慢)。
我觉得,应该有更快和/或更多的pythonic方式来做到这一点。有什么意见吗?
答案 0 :(得分:3)
您可以使用Graph.TupleList
功能:
>>> from igraph import Graph
>>> d = {'a': ['b', 'c', 'd'], 'b': ['c', 'd'], 'c': ['d']}
>>> g = Graph.TupleList([(k, v) for k, vs in d.iteritems() for v in vs])
>>> print g
IGRAPH UN-- 4 6 --
+ attr: name (v)
+ edges (vertex names):
a -- b, c, d b -- a, c, d c -- a, b, d d -- a, b, c