我有一个包含以下内容的filename.txt:
a c
b c
b e
c d
c e
c h
f g
f h
g h
我想用两个参数定义一个函数,比如
def load_graph(graph,filename)
然后将其表示为一个名为graph的字典,其中键表示顶点,值是顶点邻居列表
create or replace PACKAGE BODY MY_PP AS
PROCEDURE my_proc(execProc IN NUMBER DEFAULT 1) IS
cursor c_cursor1 is SELECT "KEY", "VALUE" FROM MY_TABLE_1;
cursor c_cursor2 is SELECT "KEY", "VALUE" FROM MY_TABLE_2;
vc_my_variable1 VARCHAR2(100);
vc_my_variable2 VARCHAR2(100);
vc_my_variable3 VARCHAR2(100);
vc_my_variable4 VARCHAR2(100);
sql_query VARCHAR2(400);
v_data_type VARCHAR2(100);
BEGIN
OPEN c_cursor1;
LOOP
FETCH c_cursor1 INTO vc_my_variable1, vc_my_variable2;
EXIT WHEN c_cursor1%NOTFOUND;
SELECT DATA_TYPE INTO v_data_type FROM USER_TAB_COLS WHERE COLUMN_NAME = vc_my_variable1 AND TABLE_NAME = 'MY_TABLE_3';
IF v_data_type = 'VARCHAR2' THEN
sql_query := 'UPDATE MY_TABLE_3 SET :1 = :2;';
END IF;
IF v_data_type = 'NUMBER' THEN
sql_query := 'UPDATE MY_TABLE_3 SET :1 = TO_NUMBER(:2);';
END IF;
EXECUTE IMMEDIATE sql_query USING vc_my_variable1, vc_my_variable2;
END LOOP;
CLOSE c_cursor1;
OPEN c_cursor2;
LOOP
FETCH c_cursor2 INTO vc_my_variable3, vc_my_variable4;
EXIT WHEN c_cursor2%NOTFOUND;
SELECT "DATA_TYPE" INTO v_data_type FROM USER_TAB_COLS WHERE COLUMN_NAME = vc_my_variable3 AND TABLE_NAME = 'MY_TABLE_4';
IF v_data_type = 'VARCHAR2' THEN
sql_query := 'UPDATE MY_TABLE_4 SET :1 = :2;';
END IF;
IF v_data_type = 'NUMBER' THEN
sql_query := 'UPDATE MY_TABLE_4 SET :1 = TO_NUMBER(:2);';
END IF;
EXECUTE IMMEDIATE sql_query USING vc_my_variable3, vc_my_variable4;
END LOOP;
CLOSE c_cursor2;
commit;
END my_proc;
END MY_PP;
答案 0 :(得分:0)
据推测,你想对图形做一些事情,所以你应该使用像networkx或igraph这样的东西来阅读边缘列表并构建图形。如果这些软件包不可用,那么以下应该可以解决这个问题:
#!/usr/bin/env python
def edge_list_to_neighbours(edge_list, directed=False):
neighbours = dict()
for source, target in edge_list:
if not source in neighbours:
neighbours[source] = [target]
else:
neighbours[source] += [target]
if not directed: # add reverse edge
for source, target in edge_list:
if not target in neighbours:
neighbours[target] = [source]
else:
neighbours[target] += [source]
return neighbours
def read_edge_list(file_path):
with open(file_path, 'r') as f:
lines = f.readlines()
return [line.strip().split() for line in lines]
if __name__ == '__main__':
edges = read_edge_list('filename.txt')
neighbours = edge_list_to_neighbours(edges)
print neighbours
答案 1 :(得分:0)
强烈建议/建议先自我尝试并发布您尝试过的代码片段,并将其作为良好实践面临问题。
考虑到文件中的每一行都有一条边信息,你可以这样做:
file_data = open("filename.txt")
graph = {}
for line in file_data:
print line
fields = line.strip("\n").split(" ")
key = fields[0]
value = fields[1]
if key not in graph:
graph[key] = [value]
else:
graph[key].append(value)
if value not in graph:
graph[value] = [key]
else:
graph[value].append(key)
希望这就是你要找的东西!