用Python将每列存储在一个单独的字典中

1 投票
2 回答
1281 浏览
提问于 2025-04-18 18:31

有没有一种有效的方法可以用Python将制表符分隔的文件的每一列存储到一个单独的字典里呢?

下面是一个示例输入文件:(真实的输入文件包含成千上万行和数百列。列的数量不是固定的,常常会变化。)

A B C
1 4 7
2 5 8
3 6 9

我需要打印列 A 中的值:

for cell in mydict["A"]:
    print cell

并且打印同一行中的值:

for i in range(1, numrows):
    for key in keysOfMydict:
        print mydict[key][i]

2 个回答

0

不确定这是否相关,但你可以使用 rpy2 来实现这个功能。

from rpy2 import robjects
dframe = robjects.DataFrame.from_csvfile('/your/csv/file.csv', sep=' ')
d = dict([(k, list(v)) for k, v in dframe.items()])

输出结果:

{'A': [1, 2, 3], 'C': [7, 8, 9], 'B': [4, 5, 6]}
1

最简单的方法是使用来自 csv 模块的 DictReader

with open('somefile.txt', 'r') as f:
   reader = csv.DictReader(f, delimiter='\t')
   rows = list(reader) # If your file is not large, you can
                       # consume it entirely

   # If your file is large, you might want to 
   # step over each row:
   #for row in reader:
   #    print(row['A'])

for row in rows:
   print(row['A'])

@Marius 提出了一个很好的观点——你可能想要根据每个列的标题单独收集所有列。

如果是这样的话,你需要稍微调整一下你的读取逻辑:

from collections import defaultdict
by_column = defaultdict(list)

for row in rows:
   for k,v in row.iteritems():
       by_column[k].append(v)

另一个选择是 pandas

>>> import pandas as pd
>>> i = pd.read_csv('foo.csv', sep=' ')
>>> i
   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9
>>> i['A']
0    1
1    2
2    3
Name: A, dtype: int64

撰写回答