Python筛选器数组对象

2024-04-24 09:57:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我从数据库中提取以下数据

事件时间用户ID子地址

2018-05-04 16:47:56.000 113 1
2018-05-04 16:48:45.000 113 2
2018-05-04 16:49:17.000 113 1
2018-05-04 16:49:27.000 113 2
2018-05-04 16:49:48.000 113 1
2018-05-04 16:49:57.000 113 2
2018-05-04 16:50:15.000 113 1
2018-05-04 16:51:01.000 113 2
2018-05-04 16:51:23.000 113 1
2018-05-04 16:51:33.000 113 2
2018-05-07 15:42:13.000 114 1
2018-05-07 15:42:16.000 114 1
2018-05-07 15:42:26.000 114 1
2018-05-07 15:42:35.000 114 2
2018-05-07 15:42:43.000 114 2
2018-05-07 15:42:54.000 114 1
2018-05-07 15:43:02.000 114 1
2018-05-07 15:43:11.000 114 2
2018-05-07 15:43:20.000 114 2
2018-05-07 15:43:35.000 114 1
2018-05-07 15:43:42.000 114 1
2018-05-07 15:43:51.000 114 2
2018-05-07 15:43:58.000 114 2

我希望它从数组中删除所有对象(或创建一个新数组,如下所示:

事件时间用户ID子地址

2018-05-04 16:47:56.000 113 1
2018-05-04 16:48:45.000 113 2
2018-05-04 16:49:17.000 113 1
2018-05-04 16:49:27.000 113 2
2018-05-04 16:49:48.000 113 1
2018-05-04 16:49:57.000 113 2
2018-05-04 16:50:15.000 113 1
2018-05-04 16:51:01.000 113 2
2018-05-04 16:51:23.000 113 1
2018-05-04 16:51:33.000 113 2
2018-05-07 15:42:13.000 114 1
2018-05-07 15:42:35.000 114 2
2018-05-07 15:42:54.000 114 1
2018-05-07 15:43:11.000 114 2
2018-05-07 15:43:35.000 114 1
2018-05-07 15:43:51.000 114 2

基本上,我希望它删除所有的对象时,有多个对象,然后在那里的子地址是相同的,我只希望它抓住第一个对象。SubAddr总是1或2。Subaddr由用户触发的操作。你知道吗

我不想在SQL中这样做,因为我也想在同一个数组上执行其他任务。你知道吗

每一行数据都放入一个对象中,这个对象被添加到一个数组中。我想让它在Python3中过滤这些数据

编辑:我的对象看起来像这样

class Events:
def __init__(self, id, EventTime, Address, SubAddr, UserId):
    self.id = id
    self.EventTime = EventTime
    self.Address = Address
    self.SubAddr = SubAddr
    self.UserId = UserId

Tags: 数据对象用户selfid数据库address地址
2条回答

试试这个

    inp_db_lst = ['2018-05-04 16:47:56.000 113 1','2018-05-04 16:48:45.000 113 2','2018-05-04 16:49:17.000 113 1','2018-05-04 16:49:27.000 113 2','2018-05-04 16:49:48.000 113 1','2018-05-04 16:49:57.000 113 2','2018-05-04 16:50:15.000 113 1','2018-05-04 16:51:01.000 113 2','2018-05-04 16:51:23.000 113 1','2018-05-04 16:51:33.000 113 2','2018-05-07 15:42:13.000 114 1','2018-05-07 15:42:16.000 114 1','2018-05-07 15:42:26.000 114 1','2018-05-07 15:42:35.000 114 2','2018-05-07 15:42:43.000 114 2','2018-05-07 15:42:54.000 114 1','2018-05-07 15:43:02.000 114 1','2018-05-07 15:43:11.000 114 2','2018-05-07 15:43:20.000 114 2','2018-05-07 15:43:35.000 114 1','2018-05-07 15:43:42.000 114 1','2018-05-07 15:43:51.000 114 2','2018-05-07 15:43:58.000 114 2']
    new_res_lst = []
    temp = ''
    for val_str in inp_db_lst:
        if val_str.split()[-1] != temp:
            new_res_lst.append(val_str)
        temp = val_str.split()[-1]
    print new_res_lst

    Result:['2018-05-04 16:47:56.000 113 1', '2018-05-04 16:48:45.000 113 2', '2018-05-04 16:49:17.000 113 1', '2018-05-04 16:49:27.000 113 2', '2018-05-04 16:49:48.000 113 1', '2018-05-04 16:49:57.000 113 2', '2018-05-04 16:50:15.000 113 1', '2018-05-04 16:51:01.000 113 2', '2018-05-04 16:51:23.000 113 1', '2018-05-04 16:51:33.000 113 2', '2018-05-07 15:42:13.000 114 1', '2018-05-07 15:42:35.000 114 2', '2018-05-07 15:42:54.000 114 1', '2018-05-07 15:43:11.000 114 2', '2018-05-07 15:43:35.000 114 1', '2018-05-07 15:43:51.000 114 2']

以下是我的解决方案:

In [1]: string = '''2018-05-04 16:47:56.000 113 1
   ...: 2018-05-04 16:48:45.000 113 2
   ...: 2018-05-04 16:49:17.000 113 1
   ...: 2018-05-04 16:49:27.000 113 2
   ...: 2018-05-04 16:49:48.000 113 1
   ...: 2018-05-04 16:49:57.000 113 2
   ...: 2018-05-04 16:50:15.000 113 1
   ...: 2018-05-04 16:51:01.000 113 2
   ...: 2018-05-04 16:51:23.000 113 1
   ...: 2018-05-04 16:51:33.000 113 2
   ...: 2018-05-07 15:42:13.000 114 1
   ...: 2018-05-07 15:42:16.000 114 1
   ...: 2018-05-07 15:42:26.000 114 1
   ...: 2018-05-07 15:42:35.000 114 2
   ...: 2018-05-07 15:42:43.000 114 2
   ...: 2018-05-07 15:42:54.000 114 1
   ...: 2018-05-07 15:43:02.000 114 1
   ...: 2018-05-07 15:43:11.000 114 2
   ...: 2018-05-07 15:43:20.000 114 2
   ...: 2018-05-07 15:43:35.000 114 1
   ...: 2018-05-07 15:43:42.000 114 1
   ...: 2018-05-07 15:43:51.000 114 2
   ...: 2018-05-07 15:43:58.000 114 2'''

In [2]: data = string.splitlines()

In [3]: data
Out[3]: 
['2018-05-04 16:47:56.000 113 1',
 '2018-05-04 16:48:45.000 113 2',
 '2018-05-04 16:49:17.000 113 1',
 '2018-05-04 16:49:27.000 113 2',
 '2018-05-04 16:49:48.000 113 1',
 '2018-05-04 16:49:57.000 113 2',
 '2018-05-04 16:50:15.000 113 1',
 '2018-05-04 16:51:01.000 113 2',
 '2018-05-04 16:51:23.000 113 1',
 '2018-05-04 16:51:33.000 113 2',
 '2018-05-07 15:42:13.000 114 1',
 '2018-05-07 15:42:16.000 114 1',
 '2018-05-07 15:42:26.000 114 1',
 '2018-05-07 15:42:35.000 114 2',
 '2018-05-07 15:42:43.000 114 2',
 '2018-05-07 15:42:54.000 114 1',
 '2018-05-07 15:43:02.000 114 1',
 '2018-05-07 15:43:11.000 114 2',
 '2018-05-07 15:43:20.000 114 2',
 '2018-05-07 15:43:35.000 114 1',
 '2018-05-07 15:43:42.000 114 1',
 '2018-05-07 15:43:51.000 114 2',
 '2018-05-07 15:43:58.000 114 2']

In [11]: datas = list(map(lambda s: s.rsplit(' ', 2), data))

In [12]: datas
Out[12]: 
[['2018-05-04 16:47:56.000', '113', '1'],
 ['2018-05-04 16:48:45.000', '113', '2'],
 ['2018-05-04 16:49:17.000', '113', '1'],
 ['2018-05-04 16:49:27.000', '113', '2'],
 ['2018-05-04 16:49:48.000', '113', '1'],
 ['2018-05-04 16:49:57.000', '113', '2'],
 ['2018-05-04 16:50:15.000', '113', '1'],
 ['2018-05-04 16:51:01.000', '113', '2'],
 ['2018-05-04 16:51:23.000', '113', '1'],
 ['2018-05-04 16:51:33.000', '113', '2'],
 ['2018-05-07 15:42:13.000', '114', '1'],
 ['2018-05-07 15:42:16.000', '114', '1'],
 ['2018-05-07 15:42:26.000', '114', '1'],
 ['2018-05-07 15:42:35.000', '114', '2'],
 ['2018-05-07 15:42:43.000', '114', '2'],
 ['2018-05-07 15:42:54.000', '114', '1'],
 ['2018-05-07 15:43:02.000', '114', '1'],
 ['2018-05-07 15:43:11.000', '114', '2'],
 ['2018-05-07 15:43:20.000', '114', '2'],
 ['2018-05-07 15:43:35.000', '114', '1'],
 ['2018-05-07 15:43:42.000', '114', '1'],
 ['2018-05-07 15:43:51.000', '114', '2'],
 ['2018-05-07 15:43:58.000', '114', '2']]


In [20]: l = [datas[0]]

In [21]: prev = datas[0][2]

In [22]: for i, j, k in datas[1:]:
    ...:     if prev == k:
    ...:         continue
    ...:     l.append([i, j, k])
    ...:     prev = k
    ...:     

In [23]: l
Out[23]: 
[['2018-05-04 16:47:56.000', '113', '1'],
 ['2018-05-04 16:48:45.000', '113', '2'],
 ['2018-05-04 16:49:17.000', '113', '1'],
 ['2018-05-04 16:49:27.000', '113', '2'],
 ['2018-05-04 16:49:48.000', '113', '1'],
 ['2018-05-04 16:49:57.000', '113', '2'],
 ['2018-05-04 16:50:15.000', '113', '1'],
 ['2018-05-04 16:51:01.000', '113', '2'],
 ['2018-05-04 16:51:23.000', '113', '1'],
 ['2018-05-04 16:51:33.000', '113', '2'],
 ['2018-05-07 15:42:13.000', '114', '1'],
 ['2018-05-07 15:42:35.000', '114', '2'],
 ['2018-05-07 15:42:54.000', '114', '1'],
 ['2018-05-07 15:43:11.000', '114', '2'],
 ['2018-05-07 15:43:35.000', '114', '1'],
 ['2018-05-07 15:43:51.000', '114', '2']]

相关问题 更多 >