为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信