首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代和丢弃顺序重复

迭代和丢弃顺序重复
EN

Stack Overflow用户
提问于 2015-10-31 20:57:34
回答 4查看 53关注 0票数 2

我对python很陌生(任何类型的编码都是如此)。所以我很抱歉如果有点混乱的话

我有一个csv文件,如下所示

代码语言:javascript
复制
A    B     C              D        E            F         G      H
14  BP1 BP1-19119308    OR1A1   19119308    chip-chip   Hs578T  human   11/23/09 
15  BP1 BP1-19119308    PTPRE   19119308    chip-chip   Hs578T  human   11/23/09 
16  BP1 BP1-19119308    SELE    19119308    chip-chip   Hs578T  human   11/23/09 
17  BP1 BP1-19119308    TAC3    19119308    chip-chip   Hs578T  human   11/23/09 
18  BP1 BP1-19119308    VEGFA   19119308    chip-chip   Hs578T  human   11/23/09 
19  CHD7 CHD7-19251738  APOA1   19251738    chip-chip   MESC    mouse   11/23/09 
20  CHD7 CHD7-19251738  ARHGAP26 19251738   chip-chip   MESC    mouse  11/23/09

我得让它看起来像这样

代码语言:javascript
复制
BP1-19119308-chip-chip-Hs578T-human OR1A1 PTPRE SELE TAC3 VEGFA 
CHD7-19251738-chip-chip-MESC-mouse  APOA1 ARHGAP26

在第一栏中,我确实做到了

代码语言:javascript
复制
import csv

out = open ('test.csv','rt', encoding='utf8') 
data =  csv.reader(out)
output = csv.writer(out) 

data = [row for row in data]
new_data = [[row[2]+'-'+row[5]+'-'+row[6] +'-'+ row[7], row[3]] for row in data] 

print (new_data)

out = open('new_data.csv','wt') 
output = csv.writer(out)  

for row in new_data:
   output.writerow(row)    

out.close()





A                                  B
BP1-19119308-chip-chip-Hs578T-human OR1A1
BP1-19119308-chip-chip-Hs578T-human PTPRE
BP1-19119308-chip-chip-Hs578T-human SELE
BP1-19119308-chip-chip-Hs578T-human TAC3
BP1-19119308-chip-chip-Hs578T-human VEGFA
CHD7-19251738-chip-chip-MESC-mouse  APOA1
CHD7-19251738-chip-chip-MESC-mouse  ARHGAP26
CHD7-19251738-chip-chip-MESC-mouse  ATP11A

但是现在我在A中有了这些副本,我不知道如何删除它们,并将分配给这些副本的B中的所有值转位。

我再次尝试循环,将当前值与前一个值进行比较,我只是把整件事情搞砸了。

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-31 21:31:40

你想用字典。如果要进一步分析,请将聚合值保存在每个标识符的列表中。标识符字符串是一个键,每个键下都有一个值列表。

代码语言:javascript
复制
new_keys = [row[2] + '-' + row[5] + '-' + row[6] + '-' + row[7] for row in data] 
new_values = [row[3] for row in data]

aggregate_values = {} # An empty dictionary
# Iterate across the paired lists together
for key, value in zip(new_keys, new_values): 
    if key not in aggregate_values:
        aggregate_values[key] = [value]
    else: 
        aggregate_values[key].append(value)

# printed output
for key in aggregate_values:
    print key + " " + " ".join(aggregate_values[key])
票数 1
EN

Stack Overflow用户

发布于 2015-10-31 21:16:46

一种解决方案是在对数据进行分组时使用字典:

代码语言:javascript
复制
import csv

out = open ('test.csv','rt', encoding='utf8') 
data =  csv.reader(out)
output = csv.writer(out) 

data = [row for row in data]
new_data = [[row[2]+'-'+row[5]+'-'+row[6] +'-'+ row[7], row[3]] for row in data] 

my_dict = {}
for row in new_data:
   if row[0] in my_dict:
      my_dict[row[0]] += " " + row[1]
   else:
      my_dict[row[0]] = row[1]

new_data = [[my_key,my_dict[my_key]] for my_key in my_dict]

print (new_data)

out = open('new_data.csv','wt') 
output = csv.writer(out)  

for row in new_data:
   output.writerow(row)    

out.close()
票数 0
EN

Stack Overflow用户

发布于 2015-11-01 04:14:30

从你所拥有的那一点开始:

test.txt

代码语言:javascript
复制
A                                   B
BP1-19119308-chip-chip-Hs578T-human OR1A1
BP1-19119308-chip-chip-Hs578T-human PTPRE
BP1-19119308-chip-chip-Hs578T-human SELE
BP1-19119308-chip-chip-Hs578T-human TAC3
BP1-19119308-chip-chip-Hs578T-human VEGFA
CHD7-19251738-chip-chip-MESC-mouse  APOA1
CHD7-19251738-chip-chip-MESC-mouse  ARHGAP26
CHD7-19251738-chip-chip-MESC-mouse  ATP11A

现在,您可以使用以下代码将所需的形状呈现出来:

代码语言:javascript
复制
with open("test.txt") as f:
    data = f.readlines()[1:]
mydata = [x.strip() for x in data]

final = {}

for x in mydata:
    k, v = x.split()
    if final.has_key(k):
        l = final[k]
        l.append(v)
    else:
        final[k] = [v]

for d in final:
    print d, " ".join(final[d])

输出:

代码语言:javascript
复制
CHD7-19251738-chip-chip-MESC-mouse APOA1 ARHGAP26 ATP11A
BP1-19119308-chip-chip-Hs578T-human OR1A1 PTPRE SELE TAC3 VEGFA

从这里开始,如果需要,可以将其写入文件中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33456550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档