按Python更改列顺序排序

时间:2014-03-21 09:38:22

标签: python sorting

我正在读取存储在dict中的csv n中的数据... colName:Value ... format ... 但是cols的顺序变得混乱.. 我想要与csv

的顺序相同

代码:

def sort_csv():

    data = list(csv.DictReader(open("Bl.csv")))
    op = open("Bl_S.csv", "wb")
    wr = csv.writer(op, quoting=csv.QUOTE_NONE)

    sorted_data = sorted(data, key = lambda d:(d['ID'], d['Begin']))
    headers = sorted_data[0].keys()
    wr.writerow(headers)
    for i in sorted_data:
         wr.writerow(i.values())

    op.close()

1 个答案:

答案 0 :(得分:1)

字典不是订购的,所以当你这样做时:

headers = sorted_data[0].keys()

headers的顺序基本上是随机的。此外,values()的返回值也是随机的,因此即使您很幸运,并且在使用以下内容编写行时headers的顺序正确:

wr.writerow(i.values())

不同行中的元素不必具有相同的顺序。

您必须单独阅读文件中的标题。在你的情况下使用DictWriter可能更好。例如:

with open('Block.csv') as infile, open('Block_sorted.csv', 'wb') as op:
    data = sorted(csv.DictReader(infile), key=lambda d: (d['Track_ID'], d['Kp_Begin']))

    # read the column names in the correct order.
    infile.seek(0)
    headers = infile.readline().split()

    wr = csv.DictWriter(op, headers, quoting=csv.QUOTE_NONE)
    wr.writeheader()
    wr.writerows(data)

    # don't need to close() files when using "with"