Python排序列表的唯一列表'项目

时间:2011-09-23 23:37:45

标签: python list sorting unique

我似乎无法在SO上找到关于我的特定问题的问题,所以请原谅我,如果以前曾经问过这个问题的话。

无论如何,我正在编写一个脚本来遍历一组URL,并给我一个包含唯一参数的唯一网址列表。

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

说我有一个像这样的URL列表

  • hxxp://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&安培;标题=事
  • hxxp://www.somesite.com/page.php B = 33和ID = 3

我将每个URL解析为列表列表,所以最终我有一个这样的列表:

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的列表。如果还不清楚请告诉我,谢谢你的快速回复! :)

1 个答案:

答案 0 :(得分:5)

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

首先将每个查询转换为一个集合,并将它们从最大到最小排序。然后,如果每个查询不是已添加查询的子集,请将其添加到新列表中。由于任何集合都是其自身的子集,因此该逻辑涵盖完全重复:

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