我有一个python问题,但我认为任何程序员都知道足以让我朝着正确的方向发送。我找到了一些非常好的代码来排序数据。以下是我想要使用的示例:
from operator import itemgetter, attrgetter
data = [('red', 1,80), ('blue', 1,900), ('red', 2,50), ('blue', 2,300)]
ss=sorted(data, key=itemgetter(0))
print ss
我的问题是如上所述以这种特定格式获取数据,因为我从csv文件中读取了我的数据,而且我不能像上面的数据一样输入数据,因为我有数据存储在文件中。 我将数据读入python:
reader = csv.reader(open("Meterdata2.csv","rb"));
name=[]; idc=[]; startD=[]; endD=[]; cons=[]; monthdays=[];
for row in reader:
if row[0] != 'IB_id':
name.append(str(row[1])) # name
idc.append(long(row[2])) # idc_acct
startD.append(tcnvrt.str2datetime(row[3]))
endD.append(tcnvrt.str2datetime(row[4]))
cons.append(int(row[6])) # consumption
monthdays.append((tcnvrt.str2datetime(row[4])-tcnvrt.str2datetime(row[3])).days)
IDC=array(idc); Name=array(name); STARTD=array(startD); # these are numpy.ndarray
END_D=array(endD); CONS=array(cons); MONTHDAYS=array(monthdays)
AA=[IDC,Name,STARTD,END_D,MONTHDAYS,CONS]
我想通过我的endD变量对数据进行排序,这是一个日期数组。
我确实在网上找到了一些功能,我认为可能会以特定的形式获取数据来排序,但我无法弄明白。我一直在写这些函数来应用于我的例子,但我不能让它们起作用。
这里是我认为可能对此有用的功能(如果我改变变量):
def __init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def __repr__(self):
return repr((self.name, self.grade, self.age))
是的,有人可以把我推向正确的方向。谢谢
答案 0 :(得分:1)
我认为你只想在排序之前将其转换为元组列表,对吗?您可以使用zip函数执行此操作:
l = zip(name, idc, startD, ...)
l.sort(key=...)
但我不明白为什么你不直接对行进行排序......
l = []
for name, idc, ... in reader:
if name != ...:
continue
l.append((str(name), int(idc), ..))
sorted(l, key=itemgetter(0))