如何在csv文件的两列中找到重复项,然后在Python中将它们组合在一起?

时间:2015-07-02 06:11:00

标签: python python-2.7 csv duplicates

我正在使用大量的蛋白质 - 蛋白质相互作用数据集,我在.csv文件中。前两列是相互作用的蛋白质,顺序无关紧要(即A / B与B / A相同,因此它们是重复的)。还有第三列,其中包含发布这些交互的来源。重复对可以来自同一来源或不同来源。

对于来自两个或多个来源的重复项,我如何组合它们,然后在第三列中为一次互动列出所有来源? (即对于A / B的交互,重复的是A / B和B / A)。

以下是列的示例:

Interactor A         Interactor B              Source
A                    B                         Mary (2005)
C                    D                         John (2004)
B                    A                         Mary (2005)
A                    B                         Steve (1993)
D                    C                         Steve (1993)

在这种情况下,我需要

Interactor A         Interactor B              Source
A                    B                         Mary (2005), Steve (1993)
C                    D                         John (2004), Steve (1993)

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用已排序 tuple作为字典键来聚合它们(使A, BB, A等效,元组可以用作字典键,因为它是不可变的和可清洗的 - 列表不是)。使用set存储聚合值并避免重复。

我还会投入defaultdict以便更好地聚合值:

from collections import defaultdict
import csv

# ... read values using a csv reader (assuming name csv_reader)

result = defaultdict(set)
for row in csv_reader:
    # create same key for `A, B` and `B, A`
    key = tuple(sorted([row[0], row[1]]))
    result[key].add(row[2])

# result should now contain all aggregated values