我有一个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文件?
感谢您的帮助。
答案 0 :(得分:1)
你可以使用一对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']
答案 1 :(得分:1)
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
>>>