我正在使用大量的蛋白质 - 蛋白质相互作用数据集,我在.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)
谢谢!
答案 0 :(得分:3)
您可以使用已排序 tuple
作为字典键来聚合它们(使A, B
和B, 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