2011-09-23 101 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