在Networkx中获取特定类型的节点

时间:2015-11-11 05:30:02

标签: python graph networkx

所以我使用networkX图表来表示一些信息。此信息由不同的对象类型表示(例如,ColorNode和ShapeNode)。

在此图表上执行的某些处理要求我提取特定类型的节点。每次我需要这样做时,我都会按照下面的代码行事。

colornodes = []
for node in graph.nodes():
    if isinstance(node, ColorNode):
        colornodes.append()

虽然这有效,但我觉得这种情况在使用图表时会经常出现,我正在那里重新发明轮子。 基本上,我想知道是否有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:5)

我建议采用另一种方法,而不是定义自己的类型并始终使用(select substr(columnA, 4, instr(columnA,',')-1) col from table1 minus select substr(columnB, 4, instr(columnB,',')-1) col from table2 ) union all (select substr(columnB, 4, instr(columnB,',')-1) col from table2 minus select substr(columnA, 4, instr(columnA,',')-1) col from table1 ) 进行检查(速度很慢)。

您可以查看此answer进行经典节点/边缘过滤。

但是我找到了另一个技巧,这可能会对你的具体情况有用。

如果定义表示节点类型的属性,则可以使用查询具有该特定属性的节点 内置string start = monthCalendar1.SelectionRange.Start.ToShortDateString(); string end = monthCalendar1.SelectionRange.End.ToShortDateString(); DateTime startDay = Convert.ToDateTime(start); DateTime endDay = Convert.ToDateTime(end); _startDate = startDay; _endDate = endDay; var VacationDate = _startDate.ToShortDateString(); do { VacationDate = _startDate.ToShortDateString(); command.Parameters.AddWithValue("vDate", VacationDate); command.CommandText = "insert into " + user + " (Date) values (@vDate)"; command.Connection = con; command.ExecuteNonQuery(); string query = "select * from " + user; command.CommandText = query; OleDbDataAdapter Daten = new OleDbDataAdapter(command); DataTable Datenquelle = new DataTable(); Daten.Fill(Datenquelle); dataGridView1.DataSource = Datenquelle; _startDate = _startDate.AddDays(1); } while (_startDate <= _endDate); { Debug.WriteLine(startDay); startDay = startDay.AddDays(1); } 函数。诀窍是它只返回真正定义属性的节点:

isinstance

输出:

get_node_attributes

当然,如果你的图表很大或是静态的,你应该保留id列表以便快速查询!

答案 1 :(得分:-3)

而不是graph.nodes(), 你可以使用xpath。