1

重複行が同じ名前の行である次のデータの重複行を削除する方法を知っている人はいますか? キャッチは、重複したエントリで異なる電話番号、電子メールなどを保持したいということです。

このデータは、タブ区切りのテキスト ファイルです。

どうも!

name    phone   email   website
Diane Grant Albrecht M.S.           
Lannister G. Cersei M.A.T., CEP 111-222-3333    cersei@got.com  www.got.com
Argle D. Bargle Ed.M.           
Sam D. Man Ed.M.    000-000-1111    dman123@gmail.com   www.daManWithThePlan.com
Sam D. Man Ed.M.            
Sam D. Man Ed.M.    111-222-333     dman123@gmail.com   www.daManWithThePlan.com
D G Bamf M.S.           
Amy Tramy Lamy Ph.D.            

理想的な出力:

name    phone   email   website
Diane Grant Albrecht M.S.           
Lannister G. Cersei M.A.T., CEP 111-222-3333    cersei@got.com  www.got.com
Argle D. Bargle Ed.M.           
Sam D. Man Ed.M.    000-000-1111, 111-222-333   dman123@gmail.com   www.daManWithThePlan.com
D G Bamf M.S.           
Amy Tramy Lamy Ph.D.

ファローアップ:

これについての考え:

from collections import defaultdict
import csv
import re

input = open('ieca_first_col_fake_text.txt', 'rU')

for row in input:
    row.split('\t')
    print row

# default to empty set for phone, email, website, area, degrees
extracted_data = defaultdict(lambda: [set(), set(), set()])

data_set = {}

for entry in input:

    for index, value in enumerate(entry):
        if index == 0:
            data_set = extracted_data[name]
        elif value:
            data_set[index - 1].add(value)

print data_set

data_set が空です ('{}')

4

2 に答える 2

2

データを解析するときは、名前がキーで、各値が各追加値のリストである辞書を使用します。各値は順番にセットになります。行ごとのデータ間の関連付けを維持する必要がない限り、これは問題なく機能します。

from collections import defaultdict
extracted_data = defaultdict(lambda: [set(), set(), set()])
# Splitting of data depends upon your input format
for entry in input:
    # Assume split() returns a 4-length iterable containing name,
    # phone, email, and url where the value is falsy if not present
    for index, value in enumerate(split(entry)):
        if index == 0:
            data_set = extracted_data[name]
        elif value:
            data_set[index - 1].add(value)
于 2013-07-08T18:29:48.233 に答える
1

collections.defaultdict()オブジェクトを使用して、既に見たものを追跡します。

from collections import defaultdict

data_so_far = defaultdict(list)

for line in inputlines:
    name = # magic to get a name

    data = data_so_far[name].add(line)

data_so_farこれまでに見たすべてのデータが含まれており、名前をキーにして、各値が一致する行のリストになっています。行を追加する代わりに、解析された情報をリストに格納できます。

これにより、データが名前ごとの構造にグループ化されます。

于 2013-07-08T18:29:23.687 に答える