我好像找不到关于我的问题的任何问题,所以请原谅我之前有人问过这个问题!
不管怎样,我正在编写一个脚本来遍历一组URL,并给我一个带有唯一参数的唯一URL列表。
我遇到的麻烦实际上是比较参数以消除多个重复项。这有点难解释,所以一些例子可能是有顺序的:
假设我有一个这样的URL列表
hxxp://www.somesite.com/page.php?id=3&title=derp
hxxp://www.somesite.com/page.php?id=4&title=blah
hxxp://www.somesite.com/page.php?id=3&c=32&title=事物
hxxp://www.somesite.com/page.php?b=33&id=3
我让它把每个URL解析成一个列表列表,所以最终我得到了这样一个列表:

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

我需要找出一种方法,在那一点上只给我列表中的两个列表:
new = [['id', 'c', 'title'], ['b', 'id']]

到现在为止,我有点需要整理一下,我知道我已经很接近了,我已经用头撞了好几天了:(。有什么想法吗?
提前谢谢!:)
编辑:对不起,不清楚!这个脚本的目的是为web应用程序寻找惟一的进入点。基本上,如果一个URL有3个唯一的入口点
['id', 'c', 'title']

我更希望使用同一个链接和两个独特的入口点,例如:
['id', 'title']

因此,我需要我的新列表来消除2的列表,而更喜欢3的列表,只要较小的变量在较大的集合中。如果还不清楚,告诉我,谢谢你的快速反应!:)

最佳答案

我假设子集被认为是“副本”(当然是非交换的)。。。
首先将每个查询转换为一个集合,并将它们从最大值排序到最小值。如果每个查询不是已添加查询的子集,则将其添加到新列表中。由于任何集合都是其自身的子集,因此此逻辑包含完全重复的集合:

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

10-05 21:13
查看更多