2016-09-01 5 views
2

私はIP、Times、Search Queries、およびWebsitesの.txtファイルをアクセスしています。私はforループを使ってリストのそれぞれのインデックスに分割し、これらのリストをすべて大きなリストに入れました。set()を使わずに重複を削除する

印刷した場合、それはこのように見えるかもしれません...

['4.16.159.114', '08:13:37', 'french-english dictionary', 'humanities.uchicago.edu/forms_unrest/FR-ENG.html\n'] 
['4.16.186.203', '00:13:54', 's.e.t.i.', 'www.seti.net/\n'] 
['4.16.189.59', '05:48:58', 'which is better http upload or ftp upload', 'www.ewebtribe.com/htmlhelp/uploading.htm\n'] 
['4.16.189.59', '06:50:49', 'cgi perl tutorial', 'www.cgi101.com/class/\n'] 
['4.16.189.59', '07:16:28', 'cgi perl tutorial', 'www.free-ed.net/fr03/lfc/course%20030207_01/\n'] 

ここに取得するための私のコードは、ちょうど私がテキストファイルからこのデータをこすると、リストにそれを置くされているので、のように見えます、別のテキストファイルに書き込みます。

import io 

f = io.open(r'C:\Users\Ryan Asher\Desktop\%23AlltheWeb_2001.txt', encoding="Latin-1") 
p = io.open(r'C:\Users\Ryan Asher\Desktop\workfile.txt', 'w') 

sweet = [] 

for line in f: 
    x = line.split("  ") 
    lbreak = x[0].split("\t") 
    sweet.append(lbreak) 

for item in sweet: 
    p.write("%s\n" % item) 

私の問題は、ここでは甘いリストまたは[2]、検索クエリがある内の各リストの第三指標、(フランス語 - 英語辞書、s.e.t.i、など)です。私は「甘い」リストに倍数を入れたくありません。

「cgi perl tutorial」と言われていますが、2回は「cgi perl tutorial」の別の検索を取り除き、最初のものを甘いリストの中に残す必要があります。

私はこれを検索クエリの3番目のインデックスに適用したいだけなので、私は思っていません。同じIPの重複を取り除きたいとは思わないので、または他の1つ。

答えて

3

のようなもの、だけlbreak[2]ないセットでという行を追加し、セットにlbreak[2]を追加:あなたはせずにリストを意味するのです「値としてクエリを作成し、キー全体リスト」とは、

sweet = [] 
seen = set() 

for line in f: 
    x = line.split("  ") 
    lbreak = x[0].split("\t") 
    if lbreak[2] not in seen: 
     sweet.append(lbreak) 
     seen.add(lbreak[2]) 
+0

これは素晴らしい仕事でした、ありがとう!しかし、セットを使用した後はどうやって注文するのですか? – Destroxia

+0

@ RyanAsher:「甘い」の順序は変更されません。 – citaret

+0

ああ、大丈夫、出力を再チェックします。ありがとう。 – Destroxia

1

クエリをキーとして、リスト全体を値としてdictを使用します。このような何か(未テスト):

sweet = {} 

for line in f: 
    ... 
    query = lbreak[2] 
    if query not in sweet: 
     sweet[query] = lbreak 

あなたの代わりに最初の各クエリの最後のインスタンスを望んでいた場合、あなただけのifを失い、そして無条件に割り当てを行うことができます。

+0

その中の質問?私はそのような辞書にどのように追加するかわからない。 – Destroxia

+0

いいえ、私はその値がリスト内のクエリであることを意味しました。クエリは、キーと値のコンポーネントの両方として表示されます。大きな問題ではない。 –

関連する問題