繁体   English   中英

从通用边缘列表在 python 中创建边缘列表

[英]create edge list in python from a general edge list

我有一个 csv,其中每一行都是一个文档。 每行中的第一个值是 ID。 每行中的所有后续值(在第一个值之后)都是文档中引用的文档。

例如,在我的 csv 中,假设我有四个文档(所以有四行):

A, B, D, E, G, H
B, C, E
C, I, K, L
D, A, C, H, I

因此,对于文档 1 (A),该文档引用了其他五个文档(B、D、E、G、H)。

我想创建一个边缘列表(并导出到一个新的 csv),这样:

A, B
A, D
A, E
A, G
A, H
B, C
B, E
C, I
C, K
C, L
D, A
D, C
D, H
D, I

如何使用 python 创建新的边列表 csv 文件?

感谢您的帮助。

你可以只使用几个 for 循环

l = [['A', 'B', 'D', 'E', 'G', 'H'],
    ['B', 'C', 'E'],
    ['C', 'I', 'K', 'L'],
    ['D', 'A', 'C', 'H', 'I']]
edge = []            
for i in l:
    for j in i[1:]:
        edge.append([i[0],j])
for i in edge:
    print i

或者甚至更容易使用列表推导式

l = [['A', 'B', 'D', 'E', 'G', 'H'],
    ['B', 'C', 'E'],
    ['C', 'I', 'K', 'L'],
    ['D', 'A', 'C', 'H', 'I']]   

edge = [[i[0],j] for i in l for j in i[1:]]

for i in edge:
    print i

['A', 'B']
['A', 'D']
['A', 'E']
['A', 'G']
['A', 'H']
['B', 'C']
['B', 'E']
['C', 'I']
['C', 'K']
['C', 'L']
['D', 'A']
['D', 'C']
['D', 'H']
['D', 'I']
import csv
from itertools import product
with open('file.csv') as f:
    spamreader = csv.reader(f, delimiter=',')
    for k, m in [(t, s) for i, *j in spamreader for t, s in product(i, j)]:
        print (k, m)

其结果将是:

A  B
A  D
A  E
A  G
A  H
B  C
B  E
C  I
C  K
C  L
D  A
D  C
D  H
D  I
>>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM