【问题标题】:Python sort unique list of lists' itemsPython对列表项的唯一列表进行排序
【发布时间】:2011-09-23 23:37:45
【问题描述】:

我似乎无法在 SO 上找到关于我的特定问题的问题,如果之前有人问过这个问题,请原谅我!

无论如何,我正在编写一个脚本来遍历一组 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=thing
  • 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 应用程序 post-spidering 找到唯一的入口点。基本上,如果一个 URL 有 3 个唯一的入口点

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

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

['id', 'title']

所以我需要我的新列表来消除带有 2 的列表,并且仅当较小的变量在较大的集合中时才更喜欢带有 3 的列表。如果仍然不清楚,请告诉我,并感谢您的快速回复! :)

【问题讨论】:

  • 规则是什么?如果有['c', 'b']['b', 'id', 'c']['b', 'id', 'd'] 怎么办?
  • 我不明白。 ['id', 'title'] 的副本是什么?是因为它是['id', 'c', 'title'] 的子集吗?
  • yi 和 Marcelo 都是对的,您的标准没有明确定义。
  • 我很抱歉不清楚。基本上我是一名网络应用程序测试人员,在爬取网站后,我正在寻找独特的入口点。因此,拥有具有相同入口点的 URL 列表对我来说毫无用处。如果 id 和 title 与 id、title 和 c 在同一页面上,则具有 3 个变量入口点的 url 将是有用的链接,然后与 2 相同。我将重新编辑我的问题试着澄清一下!谢谢:)

标签: python list sorting unique


【解决方案1】:

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

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

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

【讨论】:

  • 我相信我们有赢家!太棒了 - 非常感谢。我将使用更大的子集进行测试,但这似乎非常有效! :) :)
猜你喜欢
  • 2012-07-16
  • 1970-01-01
  • 2016-07-17
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多