有谁知道如何删除以下数据中的重复行,其中重复的行是那些具有相同名称的行?问题是,我希望保留重复条目中不同的电话号码,电子邮件等。
此数据是制表符分隔的文本文件。
THX!
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为空('{}')
答案 0 :(得分: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)
答案 1 :(得分:1)
使用collections.defaultdict()
object跟踪您已经看过的内容:
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
包含您看过的所有数据,键入名称,每个值都是匹配行的列表。您可以将已解析的信息存储在列表中,而不是添加一行。
此将您的数据分组为每个名称的结构。