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)))