[英]Tuple of tuples to list or dict
我正在写一个工作规划器,下面是一个 sqlite3 查询结果。 我想要的是按工程师(例如“Dan”)以及他们是否有任何工作(最后一列)或正在度假(倒数第二列)对数据进行分组。
所以理想情况下,我可能想要一个为每个工程师提供一个密钥的字典,为每一天提供一个密钥,或者:
我试过以下
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)
似乎一个字典就足够了。 外部字典将员工姓名作为键,内部字典将值作为键,将日期作为键,将工作/状态作为值。
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])
空列表表示该员工在该日期没有工作,但您也可以在解析完所有数据后使用另一个标识符更改它。
感谢 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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.