看板 Python 關於我們 聯絡資訊
※ 引述《drmexro (絲瓜瓜瓜)》之銘言: : 最近要整理一批資料,資料的形式大約如下 : 公司名稱 年份 月份 狀態 : A公司 2015 1 狀態1 我想到的只有這個辦法... --- tags = ['company', 'year', 'month', 'status'] source = [ {'company': 'B', 'year': '2015', 'month': '11', 'status': 'case 1'}, {'company': 'A', 'year': '2015', 'month': '11', 'status': 'case 1'}, {'company': 'A', 'year': '2015', 'month': '12', 'status': 'case 2'}, {'company': 'B', 'year': '2015', 'month': '12', 'status': 'case 1'}, {'company': 'A', 'year': '2016', 'month': '1', 'status': 'case 2'}, {'company': 'B', 'year': '2016', 'month': '1', 'status': 'case 1'}, {'company': 'B', 'year': '2016', 'month': '2', 'status': 'case 2'}, {'company': 'A', 'year': '2016', 'month': '2', 'status': 'case 2'}, ] data = {} for s in source: (co, yr, mo, st) = (s[t] for t in tags) data.setdefault(co, {}).setdefault(st, {}).setdefault(yr, []).append(mo) data 會長這樣 --- { 'A': { 'case 1': { '2015': ['11'] }, 'case 2': { '2015': ['12'], '2016': ['1', '2'] } }, 'B': { 'case 1': { '2015': ['11', '12'], '2016': ['1'] }, 'case 2': { '2016': ['2'] } } } 不知道還有沒有其他好方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.113.37 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1500736210.A.5CD.html
uranusjr: 那一堆 setdefault 改用 defaultdict 會簡單很多 07/22 23:16
drmexro: 謝謝分享方法 先來試試看 07/23 08:22