首页 > 解决方案 > 如何获取元组列表的元素

问题描述

我有一组节点

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")] 

但我不知道如何订购。提前致谢!

标签: python

解决方案


使用以下语法创建字典:

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)) 

推荐阅读