2011-09-23 64 views
2

我似乎无法找到关于我的特定问题的问题,所以原谅我,如果这已被问到!Python排序列表的项目的唯一列表

无论如何,我正在编写一个脚本来循环访问一组URL并给我一个具有唯一参数的独特URL列表。

我遇到的麻烦实际上是比较参数,以消除多个重复。这是一个有点难以解释,所以一些例子可能是为了:

说我有这样的

  • hxxp的URL列表://www.somesite.com/page.php ID = 3 &标题= DERP
  • hxxp://www.somesite.com/page.php ID = 4 &标题=嗒嗒
  • hxxp://www.somesite.com/page.php ID = 3 &? c = 32 & title =东西
  • hxxp://www.somesite.com/page.php?b = 33 & ID = 3

我把它解析每个网址列表的列表,所以最终我有像这样的列表:

sort = [['id', 'title'], ['id', 'c', 'title'], ['b', 'id']] 

我的东东来想出一个办法来给我只有2在这一点上我的列表中列出:

new = [['id', 'c', 'title'], ['b', 'id']] 

截至目前我已经有了一个位给它一点点理清,我知道我接近,我一直在抨击我的头这一个现在几天:(。有任何想法吗?

在此先感谢! :)

编辑:抱歉不清楚!该脚本旨在为web应用程序发布后的唯一入口点。基本上如果一个URL有3个独特的切入点

['id', 'c', 'title'] 

我宁愿是相同的链接带有2个独特的切入点,如:

['id', 'title'] 

所以我需要列表来我的新名单如果较小的变量位于较大的集合中,则删除2中的一个,并选择3中的一个。如果还不清楚,请告诉我,并感谢您的快速回复! :)

+0

什么是规则?如果有'['c','b']或'['b','id','c']'和'['b','id','d']'? –

+0

我不明白。什么是'['id','title']'重复的?是因为它是'['id','c','title']'的子集吗? –

+0

yi和Marcelo都是对的,你的标准没有明确定义。 – agf

回答

5

我假设的子集被认为是“重复”(非commutatively,当然)...

开始从最大到最小的每个查询转换为一组,并命令他们所有。然后将每个查询添加到新列表中,如果它不是已经添加的查询的子集。由于任何集合都是其自身的子集,因此此逻辑涵盖了精确的重复项:

a = [] 
for q in sorted((set(q) for q in sort), key=len, reverse=True): 
    if not any(q.issubset(Q) for Q in a): 
     a.append(q) 
a = [list(q) for q in a] # Back to lists, if you want 
+0

我相信我们有一个赢家!令人惊叹的 - 非常感谢。我将用更大的子集进行测试,但这似乎很令人惊讶! :) :) – Fitblip