Django-如何根据多个列对多个记录进行分组

时间:2018-09-05 10:12:55

标签: python django

我是python / django的新手,所以请多多包涵。

我有QuerySet qrySet.values_list('group_id', 'date', 'time', 'mobile')

我得到这样的列表

[1, datetime.date(2018, 9, 8), datetime.time(18, 39), 'phone1']
[2, datetime.date(2018, 9, 12), datetime.time(4, 0), 'phone1']
[2, datetime.date(2018, 9, 19), datetime.time(4, 0), 'phone2']
[2, datetime.date(2018, 9, 19), datetime.time(4, 0), 'phone4']
[9, datetime.date(2018, 9, 10), datetime.time(4, 35), 'phone3']
[9, datetime.date(2018, 9, 17), datetime.time(4, 35), 'phone3']
[9, datetime.date(2018, 9, 18), datetime.time(4, 35), 'phone3']

我正在尝试将所有具有相同group_id,日期和时间的电话号码放在一起,例如[[group_id,日期,时间,[phone1,phone2,phone9]]

这种事情在Django或python中有内置的吗?

我使用lambda尝试了一些SO解决方案,但是当我有三个时,它们基于一个值进行分组。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以尝试itertools.groupby

from itertools import groupby

[list(key) + [[g[3] for g in group]] 
    for key, group in groupby(
        qrySet.values_list('group_id', 'date', 'time', 'mobile'), 
        key=lambda x: (x[0], x[1], x[2]))]

通过您的示例数据,可以得出:

[[1, datetime.date(2018, 9, 8), datetime.time(18, 39), ['phone1']],
 [2, datetime.date(2018, 9, 12), datetime.time(4, 0), ['phone1']],
 [2, datetime.date(2018, 9, 19), datetime.time(4, 0), ['phone2', 'phone4']],
 [9, datetime.date(2018, 9, 10), datetime.time(4, 35), ['phone3']],
 [9, datetime.date(2018, 9, 17), datetime.time(4, 35), ['phone3']],
 [9, datetime.date(2018, 9, 18), datetime.time(4, 35), ['phone3']]]