Python 针对一个复制键访问多个值
我有两个专栏Python 针对一个复制键访问多个值,python,Python,我有两个专栏 RAB10 -0.016575 MEF2C -0.019655 SP2 1.24E-01 SP2 -0.18870625 SP2 0.0879425 我想要像这样的输出 RAB10 -0.016575 MEF2C -0.019655 SP2 1.24E-01 -0.18870625 0.0879425 对于重复键,我只能得到一个键和所有对应的值 我为此编写了以下代码: import math import numpy import csv imp
RAB10 -0.016575
MEF2C -0.019655
SP2 1.24E-01
SP2 -0.18870625
SP2 0.0879425
我想要像这样的输出
RAB10 -0.016575
MEF2C -0.019655
SP2 1.24E-01
-0.18870625
0.0879425
对于重复键,我只能得到一个键和所有对应的值
我为此编写了以下代码:
import math
import numpy
import csv
import collections
from decimal import *
from collections import defaultdict
with open('output.csv','rb') as file:
contents = csv.reader(file)
#storing content of Common genes Result edited file in matrix
matrix = list()
for row in contents:
matrix.append(row)
#to get both the index and the item
for index, item in enumerate(matrix):
#to access 2nd column value
first_column = [ row[0] for row in matrix ]
second_column = [ row[1] for row in matrix
for q, a in zip (first_column, second_column):
if q==q
print (Format (q,a))
此代码仅返回键和值,但不将一个值与一个重复的键合并。您需要实际使用defauldict,附加值
from collections import defaultdict
d = defaultdict(list)
with open('output.csv') as f:
for line in f: # loop over each line
spl = line.split() # split , "RAB10 -0.016575" -> ["RAB10","-0.016575"]
d[spl[0]].append(spl[1]) # append value
print(d)
defaultdict(<type 'list'>, {'MEF2C': ['-0.019655'], 'RAB10': ['-0.016575'], 'SP2': ['1.24E-01', '-0.18870625', '0.0879425']})
一旦您从Padraic Chunningham的答案中获得defaultdict
d
,就可以很容易地打印出来:
for key, values in sorted(d.iteritems()):
values_iter = iter(values)
print('%s\t%s' % (key, values_iter.next()):
for value in values_iter:
print('\t%s' % value)
或者,更紧凑:
for key, values in sorted(d.iteritems()):
print('%s\t%s' % (key, '\n\t'.join(values)))
在Python3中,您需要
.items()
而不是.iteritems()
非常感谢您。它的CSV文件包含列。它为d[spl[0]]生成错误“索引超出范围”。追加(spl[1])段代码是否有空行或只有一个值的某些行?我添加了一个try/except块是的,我有许多不重复的键(我在字典中使用单词key:Value)。leme try希望它能工作:(在尝试“try except”之后)。没有输出或返回错误。您的文件不是您当时建议的格式,在循环中打印行
,并添加几行您的问题
for key, values in sorted(d.iteritems()):
print('%s\t%s' % (key, '\n\t'.join(values)))