我有一个csv文件,格式如下:
name, id, date, score
chris, 55, 5/22/2014, 70
pete, 56, 5/22/2014, 100
chris, 55, 5/22/2014, 100
我正在尝试按名称排序,然后找到重复的条目并删除分数最低的副本。我已经完成了排序,我坚持其余的。
分类代码:
import csv
sortedlist = None
with open('my_file.csv', 'r') as zfile:
sortedlist = sorted(zfile, key=operator.itemgetter(0), reverse=False)
for line in sortedlist:
line = line.rstrip()
print line
答案 0 :(得分:2)
这是你想要的(使用functionali style ):
#!/usr/bin/env python
import csv
from pprint import pprint
from operator import itemgetter
INPUT = """\
name, id, date, score
chris, 55, 5/22/2014, 70
pete, 56, 5/22/2014, 100
chris, 55, 5/22/2014, 100"""
reader = csv.reader(INPUT.split("\n"))
rows = iter(reader)
next(rows) # skip header
sort_key = itemgetter(0, 3)
sorted_rows = reversed(sorted(rows, key=sort_key))
unique_rows = dict((row[1], row) for row in sorted_rows)
pprint(unique_rows)
<强>输出:强>
$ python -i foo.py
{' 55': ['chris', ' 55', ' 5/22/2014', ' 100'],
' 56': ['pete', ' 56', ' 5/22/2014', ' 100']}
>>>
按名称对此输出进行排序很简单:
>>> pprint(sorted(unique_rows.values(), key=itemgetter(0)))
[['chris', ' 55', ' 5/22/2014', ' 100'], ['pete', ' 56', ' 5/22/2014', ' 100']]
注意:
0th
(名称)项目和 3rd
(得分)的键对行进行排序项目任何基于具有较高分数的id的重复条目将取代较低分数的条目 所以你得到了你正在寻找的输出/结果。