使用JMESPath过滤时如何同时获取键和值而非仅返回值?
在Python中用JMESPath同时获取匹配的键和值
你当前的JMESPath表达式仅提取了匹配的字典值,若要同时保留对应的键,需要先将原字典转换为键值对数组,过滤后再重组为目标字典结构。
输入数据
s = {'111': {'name': 'john', 'exp': '1'}, '222': {'name': 'mia', 'exp': '1'}}
修改后的代码
import jmespath # 转换为键值对数组后过滤,再重组字典 result = jmespath.search("entries(@)[?value.name=='john'].{[0]: [1]}", s) print(result)
输出结果
[{'111': {'name': 'john', 'exp': '1'}}]
表达式拆解
entries(@):把原字典转为[[键, 值]]格式的数组,示例中得到[['111', {'name': 'john', 'exp': '1'}], ['222', {'name': 'mia', 'exp': '1'}]][?value.name=='john']:过滤出value字段中name等于john的键值对.{[0]: [1]}:将过滤后的键值对(数组第0位是键,第1位是值)重新组合为字典
内容的提问来源于stack exchange,提问作者SkruDJ
相关产品推荐
相关产品推荐

