我正在编写一个作业计划器,下面是一个sqlite3查询结果。我想要的是按工程师对数据进行分组。以及他们是否有工作(最后一栏)或休假(第二栏至最后一栏)。
因此,理想情况下,我可能希望每个工程师都有一个键,每天都有一个键,或者:
我试过以下几种方法
jobs = {}
for j in res:
jobs.setdefault(j[0], []).append(j[1:])
jobs2 = {}
for j in res:
jobs2.setdefault((j[0], j[1]), []).append(j[2:])但不知道如何使用setdefault或dict理解来获得我需要的数据结构。任何想法都值得赞赏。
以下是数据:
('Dan', '2021-03-11', 'Thu', '2021-03-11', 'am', '11/03', 'Customer 1', '', 'U6kfoP9QPDw', None, 0, 1)
('Dan', '2021-03-12', 'Fri', None, None, None, None, None, None, None, 0, 0)
('Dan', '2021-03-13', 'Sat', None, None, None, None, None, None, None, 0, 0)
('Dan', '2021-03-14', 'Sun', None, None, None, None, None, None, None, 0, 0)
('Dan', '2021-03-15', 'Mon', None, None, None, None, None, None, None, 0, 0)
('Dan', '2021-03-16', 'Tue', None, None, None, None, None, None, None, 0, 0)
('Dan', '2021-03-17', 'Wed', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-11', 'Thu', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-12', 'Fri', '2021-03-12', 'am', '12/03', 'Customer 4', '', 'k-uFnkwLLdo', None, 0, 2)
('Gareth', '2021-03-12', 'Fri', '2021-03-12', 'pm', '12/03', 'Customer 2', '', 'TWQdiG3piAE', None, 0, 2)
('Gareth', '2021-03-13', 'Sat', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-14', 'Sun', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-15', 'Mon', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-16', 'Tue', None, None, None, None, None, None, None, 0, 0)
('Gareth', '2021-03-17', 'Wed', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-11', 'Thu', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-12', 'Fri', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-13', 'Sat', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-14', 'Sun', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-15', 'Mon', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-16', 'Tue', None, None, None, None, None, None, None, 0, 0)
('Garth', '2021-03-17', 'Wed', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-11', 'Thu', '2021-03-11', 'am', '11/03', 'Customer 3', '', 'SCfbuLeQ9ig', None, 0, 1)
('Ian', '2021-03-12', 'Fri', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-13', 'Sat', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-14', 'Sun', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-15', 'Mon', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-16', 'Tue', None, None, None, None, None, None, None, 0, 0)
('Ian', '2021-03-17', 'Wed', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-11', 'Thu', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-12', 'Fri', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-13', 'Sat', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-14', 'Sun', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-15', 'Mon', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-16', 'Tue', None, None, None, None, None, None, None, 0, 0)
('Jim', '2021-03-17', 'Wed', None, None, None, None, None, None, None, 1, 0) 发布于 2021-03-11 22:33:05
看来一堆白痴就够了。外部dict将具有与员工名称相同的键,并将内部dict值作为值,后者将日期作为键,而jobs/status作为值。
ON_HOLIDAY = None
jobs = {}
for employee, date, *job in res:
if employee not in jobs:
jobs[employee] = dict()
if date not in jobs[employee]:
jobs[employee][date] = []
if job[-2]:
jobs[employee][date] = ON_HOLIDAY
else:
if job[-1]:
jobs[employee][date].append(job[2:-2])空列表表示员工在该日期没有职务,但您也可以在解析完所有数据后用另一个标识符更改该任务。
发布于 2021-03-17 08:27:17
多亏了Reti43的提示,我现在终于得到了以下信息:
jobs3 = {}
for nick, date, *job in res:
jobs3.setdefault(nick, {}).setdefault(date, {}).setdefault('jobs', [])
if job[-2]:
jobs3[nick][date].update({'holiday': job[-3]})
if job[-1]:
jobs3[nick][date]['jobs'].append(job[2:-2])https://stackoverflow.com/questions/66584610
复制相似问题