合并列表将逗号分隔的唯一值汇总,从csv保留原始订单

时间:2016-09-15 07:48:47

标签: python

这是我的数据:

data.csv

id,fname,lname,education,gradyear,attributes
1,john,smith,mit,2003,qa
1,john,smith,harvard,207,admin
1,john,smith,ft,212,master
2,john,doe,htw,2000,dev

以下是代码:

from itertools import groupby
import csv
import pprint


t = csv.reader(open('data.csv'))
t = list(t)


def join_rows(rows):
    return [(e[0] if i < 3 else ','.join(e)) for (i, e) in enumerate(zip(*rows))]



for name, rows in groupby(sorted(t), lambda x:x[0]):
    print join_rows(rows)

它可以工作,但是在合并它时,它不会保留原始顺序,而是从最后一个到第一个结合起作用

输出是:

['1', 'john', 'smith', 'ft,harvard,mit', '212,207,2003', 'master,admin,qa']
['2', 'john', 'doe', 'htw', '2000', 'dev']
['id', 'fname', 'lname', 'education', 'gradyear', 'attributes']

而不是:

['1', 'john', 'smith', 'mit,harvard,ft', '2003,207,212', 'qa,admin,master']
['2', 'john', 'doe', 'htw', '2000', 'dev']
['id', 'fname', 'lname', 'education', 'gradyear', 'attributes']

,因为它列在CSV文件(原始订单)

我解决此问题的方法是重新运行值并尝试将其反转。有没有更聪明的方法?

1 个答案:

答案 0 :(得分:0)

问题是排序,这不是必需的。改为:

groupby(t, lambda x:x[0])