我有一个平坦的CSV文件,其数据如下:
tag1,pageA
tag2,pageA
tag3,pageA
tag1,pageB
tag4,pageB
tag5,pageC
tag5,pageD
tag4,pageE
tag6,pageE
我想以某种方式将pages
细分为互斥组,具体取决于他们直接或通过关联共享的所有tags
。
换句话说,我想回答的问题是:
例如,除非我计算错误,否则上述样本数据有两组:
Group 1:
(tag1,tag2,tag3,tag4,tag6) ==>
(pageA,pageB,pageE)
Group 2:
(tag5) ==>
(pageC,pageD)
获得这些分组的合理方法是什么?我愿意使用Python,sqlite或两者兼而有之。
答案 0 :(得分:0)
dic = {}
def add2dic(tag, page):
try:
dic[tag].append(page)
except KeyError:
dic[tag] = [page]
add2dic('tag1','pageA')
add2dic('tag2','pageA')
add2dic('tag3','pageA')
add2dic('tag1','pageB')
add2dic('tag4','pageB')
add2dic('tag5','pageC')
add2dic('tag5','pageD')
add2dic('tag4','pageE')
add2dic('tag6','pageE')
def query(iterable):
aset = set()
for tag in iterable:
for page in dic[tag]:
aset.add(page)
return sorted(list(aset))
print(query(['tag1','tag2','tag3','tag4','tag6']))
print(query(['tag5']))
[' pageA',' pageB',' pageE']
[' pageC',' pageD']