Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除重复行?_Python - Fatal编程技术网

Python 删除重复行?

Python 删除重复行?,python,Python,是否有人知道我如何删除以下数据中的重复行,其中重复行是具有相同名称的行?问题是我想把不同的电话号码、电子邮件等保留在一个重复条目中 此数据是以制表符分隔的文本文件 谢谢 理想输出: 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. Bargl

是否有人知道我如何删除以下数据中的重复行,其中重复行是具有相同名称的行?问题是我想把不同的电话号码、电子邮件等保留在一个重复条目中

此数据是以制表符分隔的文本文件

谢谢

理想输出:

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
数据集是空的(“{}”)

使用一个函数来跟踪您已经看到的内容:

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\u到目前为止
包含您看到的所有数据,键入名称,每个值都包含一个匹配行列表。您可以在列表中存储解析后的信息,而不是添加行


这会将数据按名称分组为一个结构。

解析数据时,请使用字典,其中名称是键,每个值是每个附加值的列表,每个附加值依次是一个集合。只要不需要按行维护数据之间的任何关联,这就可以正常工作

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)

这些是什么样的“行”?sql查询的结果?文本文件?xml?字典?这些数据是什么形式的?您标记了此python,但不清楚此数据当前是否位于python dict或数组、文本文件或sql中。您正在使用
input
两次,但未尝试重新定位光标。输入:循环中的
for条目将不起任何作用,因为您已经在输入:
循环中的
for行的文件末尾。为第二个循环查找或重新打开文件。另外,请查看
with
语句以读取文件。您能否给出一个示例条目?@goldisfine不确定“lambda”的作用。谷歌说它生成了一个“匿名函数”,但在这里似乎没有这样做。。。相反,你要再设置三套设备来存储电话、电子邮件和网站,是吗?我不知道“拆分”是正确的,因为它们已经被拆分,因为它是一个tab delim文件。
defaultdict
接受一个可调用函数,该函数返回一个值,该值在第一次将该值编入索引时成为字典中每个条目的默认值。这里的
lambda
返回一个包含3个空集的列表,因此每个字典条目默认为一个包含3个空集的列表。您能看看我的后续内容吗?
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)