使用dpath库处理含方括号的字典键的问题
解决dpath库中含方括号的字典键匹配问题
dpath默认把[和]当作通配符解析,你用单个反斜杠转义无效是因为Python字符串会先处理反斜杠,实际传递给dpath的路径里并没有保留转义符。以下三种方法可以解决这个问题:
- 双反斜杠手动转义:在Python字符串里,用双反斜杠表示字面量的反斜杠,这样dpath就能识别转义后的方括号:
import dpath d = {'Position': {'Position x [mm]': 3}} result = dpath.search(d, 'Position/Position x \\[mm\\]/*') print(result) # 输出: {'Position x [mm]': 3}
- 使用原始字符串:在路径字符串前加
r,让Python不解析反斜杠,直接传递给dpath:
import dpath d = {'Position': {'Position x [mm]': 3}} result = dpath.search(d, r'Position/Position x \[mm\]/*') print(result) # 输出: {'Position x [mm]': 3}
- 用dpath内置工具自动转义:使用
dpath.util.escape函数自动处理特殊字符,避免手动转义出错:
import dpath from dpath import util d = {'Position': {'Position x [mm]': 3}} escaped_key = util.escape('Position x [mm]') path = f'Position/{escaped_key}/*' result = dpath.search(d, path) print(result) # 输出: {'Position x [mm]': 3}
注意:你的预期输出描述有误,dpath.search按给定路径Position/Position x [mm]/*查询,返回的是该键下的内容,也就是{'Position x [mm]': 3},而非外层的{'Position': {'Position x [mm]': 3}}。
内容的提问来源于stack exchange,提问作者gioarma
相关产品推荐
相关产品推荐

