Python对列表项的唯一列表进行排序

Fit*_*lip 2 python sorting list unique

我似乎无法找到关于我的特定问题的问题,所以请原谅我,如果之前已经提出过这个问题!

无论如何,我正在编写一个脚本来遍历一组URL,并给我一个具有唯一参数的唯一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']]
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法,在我的列表中只给出2个列表:

new = [['id', 'c', 'title'], ['b', 'id']]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经有点了解它,我知道我已经接近了,我已经对这个问题抨击了几天了:(.有什么想法吗?

提前致谢!:)

编辑:抱歉不清楚!此脚本旨在为后期抓取的Web应用程序查找唯一的入口点.基本上,如果URL有3个唯一的入口点

['id', 'c', 'title']
Run Code Online (Sandbox Code Playgroud)

我更喜欢与2个唯一入口点相同的链接,例如:

['id', 'title']
Run Code Online (Sandbox Code Playgroud)

因此,如果较小的变量位于较大的集合中,我需要新的列表列表来消除带有2的列表并且更喜欢仅带有3的列表.如果还不清楚请告诉我,谢谢你的快速回复!:)

Mar*_*tos 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
Run Code Online (Sandbox Code Playgroud)