第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python 數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換,將線性元祖轉(zhuǎn)換成字典樹

python 數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換,將線性元祖轉(zhuǎn)換成字典樹

慕慕森 2019-04-08 11:18:24
有一個數(shù)據(jù)表idfidtitle1-1python2-1ruby3-1php4-1lisp51flask61django71webpy82rails93zend106dblog這是一個欄目表,title是欄目名稱,id是欄目id,fid是欄目的父id.構(gòu)建一個多級欄目分類通過python查詢處理,會得到下面的一個元祖,t=((1,-1,'python'),(2,-1,'ruby'),(3,-1,'php'),(4,-1,'lisp'),(5,1,'flask'),(6,1,'django'),(7,1,'webpy'),(8,2,'rails'),(9,3,'zend'),(10,6,'dblog'))希望通過python處理,轉(zhuǎn)換成下面的list字典樹l=[{'id':1,'fid':-1,'title':'python','son':[{'id':5,'fid':1,'title':'flask',},{'id':6,'fid':1,'title':'django','son':[{'id':10,'fid':6,'title':'dblog',},]},{'id':7,'fid':1,'title':'webpy',},]},{'id':2,'fid':-1,'title':'ruby','son':[{'id':8,'fid':2,'title':'rails',},]},{'id':3,'fid':-1,'title':'php','son':[{'id':9,'fid':3,'title':'zend',},]},{'id':4,'fid':-1,'title':'lisp',}]也就是類似網(wǎng)站的目錄,父欄目包含子欄目.自己寫了好幾個,感覺效率不夠好,求大神更pythonic的方法在stackoverflow有人回答大概如下:frompprintimportpprintl=[]entries={}forid,fid,titleint:entries[id]=entry={'id':id,'fid':fid,'title':title}iffid==-1:l.append(entry)else:parent=entries[fid]parent.setdefault('son',[]).append(entry)pprint(l)
查看完整描述

2 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗 獲得超6個贊

Stackoverflow上的那個答案,要t中的父元素出現(xiàn)在子元素之前,如果不能保證,可以用下面的方式:
fromitertoolsimportgroupby
fromoperatorimportitemgetterasget
frompprintimportpprint
#groupbyfid
tmp=dict([(k,list(rows))fork,rowsingroupby(sorted(t,key=get(1)),get(1))])
defmap_fun(row):
item=dict(zip(('id','fid','title'),row))
ifrow[0]intmp:
item['son']=find_children(row[0])
returnitem;
deffind_children(parent):
returnmap(map_fun,tmp[parent])
pprint(find_children(-1))
關(guān)于pythonic,可以試試這個>>>importthis
PS:我不是大神啊。
                            
查看完整回答
反對 回復(fù) 2019-04-08
  • 2 回答
  • 0 關(guān)注
  • 483 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號