通过使用Python Glom过滤其他属性上的列表来获取嵌套属性的值

巴勃罗

我有一个像这样的数据对象:

data = {
    'props': {
        'items': [
            {'name': 'a', 'content': 'plain'},
            {'name': 'b', 'content': {'id': 'x'}},
            {'name': 'c', 'content': {'id': 'y'}},
        ]
    }
}

使用glom,我想获得等于的项x的值idnameb

到目前为止,我有这个:

from glom import glom
from glom import SKIP


glom(data, ('props.items', [lambda i: i if i['name']=='b' else SKIP]))

哪个返回:

[{'name': 'b', 'content': {'id': 'x'}}]

我想不出什么规格(中glom的说法),以用于提取返回列表中的唯一元素,然后价值id

我可以给glom打电话两次:

glom(glom(data, ('props.items', [lambda i: i if i['name']=='b' else SKIP]))[0], 'content.id')

但我认为应该有一个方法可以一次调用。关于如何实现这一目标的任何想法?

马哈茂德·哈希米

你很亲密!关于glom链(您在那里使用该元组所做的事情)的好处是,您基本上不需要两次调用glom。您可以直接链接:

>>> glom(data, ('props.items', [lambda i: i if i['name']=='b' else SKIP], '0.content.id'))
'x'

我所做的就是添加第三个元素'0.content.id',该元素获取第一个项目,然后是内容密钥,然后是id密钥。

对于面向glom的方式,您可以将该lambda重写为以下内容:

>>> glom(data, ('props.items', [Check('name', equal_to='b', default=SKIP)], '0.content.id'))
'x'

它做同样的事情,实际上稍长一些,但阅读起来可能更好一些。将其与另一个Check for validate结合使用,如果找不到名称相同的对象,甚至可以阻止最后的查找步骤:

>>> glom(data, ('props.items', [Check('name', equal_to='z', default=SKIP)], Check(default=STOP), '0.content.id'))
[]

不要忘了导入CheckSTOP如果走那条路。另外,如果规范越来越长,您可以给它一个漂亮的描述性变量名称:)谢谢您提出的好问题!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过属性从列表中获取项目,然后使用其其他属性?

使用其他属性代替输入值来更新总计

使用数据属性在过滤上创建其他div

如何通过在其他字典中的字典中使用他的键来获取 python 字典值

使用可为空的属性过滤嵌套列表

如何通过使用xmldocument中的子节点的属性值来获取父节点的属性值?

python:关于其他属性的洗牌列表

通过使用 Fluent 断言在嵌套列表中包含属性来测试列表等效性

使用多个属性上的except过滤列表

使用其他属性的值进行Python Eve验证

通过使用元素的属性值获取元素

我正在尝试通过访问嵌套属性并检查其属性值是否包含某个字符串来从数组中过滤项目

如何从响应中获取cdata中的属性值并在其他请求中使用它

使用其他类的属性时,为什么我会通过FusedLocationProviderClient获取NullPointerException

如何通过迭代存储从文件读取的数据的列表的索引值来获取名称和其他详细信息?

打字稿:如何通过通用参数的属性和其他类型来限制属性选择?

如何通过查找属性的值来获取元素的索引?

Python3在嵌套字典和列表中按值搜索,然后获取其他最近的键/值对

如何使用相同的嵌套属性值过滤文档

通过反射C#获取嵌套的属性值

从属性获取值(如果不为空),否则通过Linq获取其他属性

使用反射获取类内列表属性的count属性值

如何使用Java 8流通过其他的对象列表值与过滤器,使一个新的列表?

使用带有 jq 的正则表达式根据其他嵌套属性的值选择对象

如何使用与其他 JSON 对象的一个公共属性来获取一个 JSON 的特定属性?

使用扩展属性API获取其他MIME部件

是否可以使用计算出的属性来计算Vue中的其他属性?

如何通过使用硒在python中指定另一个属性来检索属性

在Chef的同一属性文件中的其他属性中使用属性值