Python 对嵌套列表进行排序和分组由类对象组成
我有数百个文本文件需要根据用户名和日期进行解析。我试图将有用的数据放在文本文件的列表中,如下所示:Python 对嵌套列表进行排序和分组由类对象组成,python,list,sorting,object,grouping,Python,List,Sorting,Object,Grouping,我有数百个文本文件需要根据用户名和日期进行解析。我试图将有用的数据放在文本文件的列表中,如下所示: [ ['1234245@gmail.com', '34209809' '1434546354', '2016-07-18 00:20:58'], ['abcd@gmail.com', '234534345', '09402380',, '2016-07-18 00:20:03'], ['username@gmail.com', '345315531'
[
['1234245@gmail.com', '34209809' '1434546354', '2016-07-18 00:20:58'],
['abcd@gmail.com', '234534345', '09402380',, '2016-07-18 00:20:03'],
['username@gmail.com', '345315531','1098098098', '2016-07-18 02:40:00'],
['abcd@gmail.com', '345431353', '231200023', '2016-07-18 15:45:49'],
['1234245@gmail.com', '23232424', '234809809', '2016-07-18 20:45:40']
]
但是,我想根据datetime和group by usernames对它们进行排序,以便输出如下:
[
['1234245@gmail.com', '23232424', '234809809', '2016-07-18 20:45:40'],
['1234245@gmail.com', '34209809' '1434546354', '2016-07-18 00:20:58'],
['abcd@gmail.com', '345431353', '231200023', '2016-07-18 15:45:49'],
['abcd@gmail.com', '234534345', '09402380',, '2016-07-18 00:20:03'],
['username@gmail.com', '345315531','1098098098', '2016-07-18 02:40:00']
]
这是我的密码:
import glob
from operator import itemgetter
from itertools import groupby
def read_large_file(filename):
matrix=[]
global username
username=[]
for myfile in glob.glob(filename):
infile = open(myfile, "r")
for row in infile:
row=row.strip()
array=row.split(';')
username.append(array[9])
matrix.append(cdr(array[9],array[17],array[18],array[8]))
return matrix
class cdr(object):
def__init__(self,username,total_seconds_since_start,download_bytes,date_time):
self.username=username
self.total_seconds_since_start=total_seconds_since_start
self.download_bytes=download_bytes
self.date_time=date_time
def GroupByUsername(matrix):
new_matrix=[]
new_matrix=groupby(matrix, itemgetter(0))
return new_matrix
matrix=read_large_file('C:\Users\ceren\.spyder2/test/*')
matrix_new=GroupByUsername(matrix)
我尝试使用此链接中的解决方案:但我遇到以下错误:
'cdr' object does not support indexing
'cdr' object is not iterable
您可能只需要使用简单的Python内置排序
sorted_list = sorted(data, key=lambda user_info: (user_info[0], user_info[3]))
lambda键告诉Python如何对列表进行排序(升序)。对于
数据
中的每个条目,用户信息
将是4个属性的列表。因此,user\u info[0]
将是电子邮件,user\u info[3]
将是日期时间。谢谢,我试过了,但是我得到了这个错误:TypeError:()正好接受1个参数(给定2个)啊,对不起,我忘记了键=
。我已经修复了它-尝试一下:)仍然有这样一个:TypeError:“cdr”对象不支持索引,我认为python不允许我将类对象放入列表索引中。如果您想要完全复制输出,您需要排序(排序(data,key=lambda x:x[-1],reverse=True),key=lambda x:x[0])因为Timsort是稳定的。我给出的解决方案将对您提供的嵌套列表进行排序。要对cdr对象列表进行排序,您需要:sorted\u list=sorted(cdr\u list,key=lambda cdr:(cdr.username,cdr.date\u time))