我是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解决方案,但是当我有三个时,它们基于一个值进行分组。
谢谢
答案 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']]]