gpt4 book ai didi

python - 删除数据列表中的重复项 Python 2.7/Django

转载 作者:行者123 更新时间:2023-12-01 01:44:38 25 4
gpt4 key购买 nike

例如,我有一个名为 attendances 的列表包含多个数据,例如:

[ <Attendance>: 11804 : 2018-07-18 12:22:55, <Attendance>: 11804 : 2018-07-18 12:23:04, <Attendance>: 2 : 2018-07-25 16:17:18, <Attendance>: 2 : 2018-07-25 16:17:20, <Attendance>: 2 : 2018-07-25 16:17:23, <Attendance>: 2 : 2018-07-25 16:27:52]

当我需要打印它时。我做的很简单:

for data in attendances:
print 'User ID : {}'.format(data.user_id)
print 'Timestamp : {}'.format(data.timestamp)

结果将是:

User ID   : 11804
Timestamp : 2018-07-18 12:22:55
User ID : 11804
Timestamp : 2018-07-18 12:23:04
User ID : 2
Timestamp : 2018-07-25 16:17:18
User ID : 2
Timestamp : 2018-07-25 16:17:20
User ID : 2
Timestamp : 2018-07-25 16:17:23
User ID : 2
Timestamp : 2018-07-25 16:27:52

但这不是我需要的,因为它打印了所有数据。我只需要显示每个 User ID 中的第一个数据.

像这样:

User ID   : 11804
Timestamp : 2018-07-18 12:22:55
User ID : 2
Timestamp : 2018-07-25 16:17:18

有人知道我应该做什么吗?...

最佳答案

带有查询

您可以进行查询以获得包含字典的QuerySet。在这种情况下,每个字典都包含一个 'user_id' 键和一个 'first_timestamp' 键,例如:

from django.db.models import <b>Min</b>

data =Attendance.objects.values('user_id').annotate(
<b>first_timestamp=Min('timestamp')</b>
).order_by('user_id')

然后您可以枚举结果,并按如下方式打印:

for data in attendances:
print 'User ID : {}'.format(data['user_id'])
print 'Timestamp : {}'.format(data['timestamp'])

使用集合来维护已见过用户

如果无法编写此类查询(例如,您会得到一个列表)。我们可以先进行排序,然后维护一组已经见过的用户id:

from operator import attrgetter

sorted_attendances = sorted(attendances, key=attrgetter('timestamp'))
seen_users = set()

for attendance in sorted_attendances:
if <b>attendance.user_id not in seen_users</b>:
seen_users.add(attendance.user_id)
print 'User ID : {}'.format(data.user_id)
print 'Timestamp : {}'.format(data.timestamp)

但是,这种方法通常更昂贵,因为数据库传输的数据量更大,因此要处理的数据量也更大。

关于python - 删除数据列表中的重复项 Python 2.7/Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51514540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com