根据第一列将第二列转换为行

时间:2017-03-02 22:04:54

标签: python csv

我一直在寻找问题的答案,但没有成功。我有一个带有大量单词列表的csv文件,如下所示:

a 1
a 2
a 3
a 4
b 5
b 6
b 7
b 8

我需要将其转换为:

a 1 2 3 4
b 5 6 7 8

有人知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:1)

使用defaultdict存储与每个字母匹配的数字列表。

from collections import defaultdict

dd = defaultdict(list)

with open('input.csv') as f:
    for line in f:
        let, num = line.rstrip().split()
        dd[let].append(num)

with open('out.csv', 'w') as fo:
    for k, v in dd.items():
        fo.write('%s %s\n' % (k, ' '.join(v)))

或者您可以使用csv模块

import csv

...

with open('data2.txt') as f:
    for line in csv.reader(f, delimiter=' '):
        let, num = line[:2]
        dd[let].append(num)

...

您可能会在此操作之后丢失订单以重新确认,在构建输出文件时对键进行排序(这会为您排序顺序而不是原始顺序)。

with open('out.csv', 'w') as fo:
    for k in sorted(dd.keys()):
        fo.write('%s %s\n' % (k, ' '.join(dd[k])))

或者只是调整其他答案以使用collections.OrderedDict

答案 1 :(得分:0)

我想你想在这里编译dict

d = {}
for row in csvdata:
    col1 = row[0]
    col2 = row[1]
    if col1 in d:
         d[col1].append(col2)
    else:
         d[col1] = [col2]

如果你需要将dict恢复到你提到的列表格式列表中,你只需通过循环遍历dict的键来编译。

outlists = []
for col1 in d:
    outlists.append([col1] + d[col1]) # Using '+' to concatenate lists.

我认为只使用字典,由第一列的键索引,应该是,如果不是更多,有用。

相关问题