使用dpath库时,如何将01、02等字符串设为字典键而非列表索引?
问题描述
我们希望创建/维护如下结构的字典:
{ "a": {"bb": {"01": "some value 01", "02": "some value 02", } }, }
使用dpath库的.new()方法实现时,遇到了路径解析问题:
import dpath d = dict() ; print(d) # 输出: {} dpath.new(d, 'a/bb/00/c', '00val') ; print(d) # 输出: {'a': {'bb': [{'c': '00val'}]}} # 问题:这里"bb"被自动转为列表,"00"被识别为列表索引0 # 期望结果:{'a': {'bb': {'00': {'c': '00val'} }}} # 而非当前生成的列表结构
当路径中包含"00"这类纯数字字符串时,dpath会默认将其解析为列表索引,而非字典键。目前只能通过给键添加前缀(如s00、s01)规避,但需要更合理的解决方法。
解决方案
调用dpath.new()时传入listify=False参数,即可强制所有路径段都作为字典键处理,不会自动将纯数字路径段解析为列表索引:
import dpath d = dict() dpath.new(d, 'a/bb/00/c', '00val', listify=False) print(d) # 输出: {'a': {'bb': {'00': {'c': '00val'}}}}
这个参数会全局禁用路径段的列表化解析,所有纯数字的路径段都会被当作普通字典键处理,完全符合需求。
内容的提问来源于stack exchange,提问作者Nam G VU
相关产品推荐
相关产品推荐

