簡體   English   中英

要列出或聽寫的元組的元組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM