我有一组节点
nodes = ["uno","dos","tres","cuatro","cinco","seis"]
和一组边缘
edges = [("uno", "dos"),
("uno", "tres"),
("dos", "tres"),
("dos", "cuatro"),
("tres", "cuatro"),
("tres", "cinco"),
("cuatro", "cinco"),
("cuatro", "seis"),
("cinco", "seis")]
我已经定义了这些边的倒数
inverses =[(j,i) for (i,j) in edges]
现在我有了一组弧线
arcs = edges + inverses
我的问题是,我想获得一组确定的第一个元素的弧集中的所有元素。那是
ArcsOut[i in nodes] = [(i,j) for (i,j) in arcs for i in nodes for j in nodes].
我想获得类似的东西。如果我要获得所有具有拳头成分“ uno”的弧,我希望拥有:
ArcsOut["uno"]= [("uno", "dos"),("uno", "tres"),("dos", "uno"),("tres", "uno")]
但是我不知道该如何订购。 预先感谢!
答案 0 :(得分:2)
使用以下语法创建字典:
ArcsOut = dict(((i,[(k,l) for k,l in arcs if k == i]) for (i,j) in arcs))
然后ArcsOut ['unos'] =所需的输出。
/ *编辑* /
明智地考虑使用defaultdict:
ArcsOut = defaultdict(list)
for k, v in arcs:
ArcsOut[k].append((k,v))
答案 1 :(得分:1)
您可以通过列表理解来做到这一点。令人高兴的是,您可以将元组解包与条件一起使用,以使其变得非常简短,并使其清晰易读。
arc_out = {node: [(i, j) for i, j in arcs if i == node] for node in nodes]
相反,如果要获得 i
或j
与特定节点名称匹配的所有边缘,则可以这样做
[edge for edge in arcs if 'uno' in edge]