获取互斥记录:按标记云分组,甚至按共享关联分组

2024-10-16 17:17:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个平面的CSV文件,里面有这样的数据:

tag1,pageA
tag2,pageA
tag3,pageA
tag1,pageB
tag4,pageB
tag5,pageC
tag5,pageD
tag4,pageE
tag6,pageE

我想以某种方式将pages划分为相互排斥的组,这取决于它们直接或通过关联共享的所有tags。你知道吗

换句话说,我想回答的问题是:

  1. 我有多少独立的页面组?(其中独立性定义为不与其他组共享公共标记。)
  2. 对于每个组,定义它的标签是什么?你知道吗
  3. 对于每个组,它包含哪些页面?你知道吗

例如,除非我计算错误,否则上述示例数据有两组:

Group 1:
(tag1,tag2,tag3,tag4,tag6) ==>
  (pageA,pageB,pageE)

Group 2:
(tag5) ==>
  (pageC,pageD)

获得这些分组的合理方法是什么?我对使用Python和/或sqlite持开放态度。你知道吗


Tags: 数据定义group页面pagedtag1tag2tag3
1条回答
网友
1楼 · 发布于 2024-10-16 17:17:39
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']

相关问题 更多 >