亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

python的字典中,如何向指定路徑添加值?

python的字典中,如何向指定路徑添加值?

Helenr 2019-05-22 16:35:26
想實現一個函數,傳入字典,路徑/鍵的列表和值,返回修改后的字典。大概是這個意思defadd_value(dict,path,value):#dict是待修改的字典#path是路徑,列表形式,如`['A','B','C']`,A目錄下有B目錄,B目錄下有C目錄#value是一個元組、列表、字典或者字符串……returndict需要實現的功能大概像這樣:d={}add_value(d,['A','B','C'],('output.txt','2mb')){'A':{'B':{'C':[('output.txt','2mb')]}}}add_value(d,['X','Y'],('log.txt','10kb')){'A':{'B':{'C':'string'}},'X':{'Y':[('log.txt','10kb'),]}}add_value(d,['A','B','C'],('video.mp4','2GB')){'A':{'B':{'C':[('output.txt','2mb'),('video.mp4','2GB')]}},'X':{'Y':{'Z':[('log.txt','10kb'),]}}}path的長度是不定的,或者說目錄的深度是不定的,所以好像要用循環調用,不能用幾個if結構。python新手,實在不知如何實現,求教。
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

如果不是做特定的oj題目的話,推薦使用xml,更直觀,也更好管理
fromlxmlimportetree
defgen_xpath(path):
return'//root/'+'/'.join(path)
defadd_value(root,path,value):
purpose_path=gen_xpath(path)
folder=root.xpath(purpose_path)
parent_folder=root
ifnotfolder:
fori,nameinenumerate(path,1):
temp_path=gen_xpath(path[:i])
temp_folder=root.xpath(temp_path)
ifnottemp_folder:
parent_folder=etree.SubElement(parent_folder,name)
else:
parent_folder=temp_folder
folder=root.xpath(purpose_path)[0]
file=etree.SubElement(folder,'file')
file.set('name',value[0])
file.set('size',value[1])
if__name__=='__main__':
root=etree.Element('root')
add_value(root,['A','B','C'],('output.txt','2mb'))
add_value(root,['X','Y'],('log.txt','10kb'))
add_value(root,['A','B','C'],('video.mp4','2GB'))
etree.ElementTree(root).write('test.xml',pretty_print=True)
輸出結果:
                            
查看完整回答
反對 回復 2019-05-22
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

defadd_value(dict_obj,path,value):
obj=dict_obj
fori,vinenumerate(path):
ifi+1==len(path):
ifnotisinstance(obj.get(v,''),list):
obj[v]=list()
obj[v].append(value)
continue
obj[v]=obj.get(v,'')ordict()
obj=obj[v]
returndict_obj
d={}
printadd_value(d,['A','B','C'],('output.txt','2mb'))
printadd_value(d,['X','Y'],('log.txt','10kb'))
printadd_value(d,['A','B','C'],('video.mp4','2GB'))
                            
查看完整回答
反對 回復 2019-05-22
  • 2 回答
  • 0 關注
  • 1165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號