我一直在寻找问题的答案,但没有成功。我有一个带有大量单词列表的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
有人知道如何做到这一点吗?
答案 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.
我认为只使用字典,由第一列的键索引,应该是,如果不是更多,有用。