首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取相互排斥的记录:按标记云分组,甚至按共享关联分组

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

Stack Overflow用户
提问于 2015-03-15 23:55:14
回答 1查看 56关注 0票数 0

我有一个带有如下数据的平面CSV文件:

代码语言:javascript
运行
复制
tag1,pageA
tag2,pageA
tag3,pageA
tag1,pageB
tag4,pageB
tag5,pageC
tag5,pageD
tag4,pageE
tag6,pageE

我想以某种方式将pages分割成相互排斥的组,这取决于它们直接或通过关联共享的所有tags

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

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

例如,除非我错算,否则上面的样本数据有两组:

代码语言:javascript
运行
复制
Group 1:
(tag1,tag2,tag3,tag4,tag6) ==>
  (pageA,pageB,pageE)

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

获得这些分组的合理方法是什么?我愿意使用Python,sqlite,或者两者兼用。

EN

回答 1

Stack Overflow用户

发布于 2015-03-16 00:21:02

代码语言:javascript
运行
复制
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']))

‘页面A’,‘页面B’,'pageE‘

'pageD‘,’pageD‘

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29067693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档