我希望能够仅过滤掉 1 个或所有小于某个索引的列表项,但 glom 文档的片段部分中的过滤器片段并没有告诉我如何做到这一点。
示例(仅保留列表中的前 2 个项目):
target = [5, 7, 9]
some_glom_spec = "???"
out = glom(target, some_glom_spec)
assert out == [5, 7]
Run Code Online (Sandbox Code Playgroud) Glom 使访问复杂的嵌套数据结构变得更加容易。 https://github.com/mahmoud/glom
给定以下玩具数据结构:
target = [
{
'user_id': 198,
'id': 504508,
'first_name': 'John',
'last_name': 'Doe',
'active': True,
'email_address': 'jd@test.com',
'new_orders': False,
'addresses': [
{
'location': 'home',
'address': 300,
'street': 'Fulton Rd.'
}
]
},
{
'user_id': 209,
'id': 504508,
'first_name': 'Jane',
'last_name': 'Doe',
'active': True,
'email_address': 'jd@test.com',
'new_orders': True,
'addresses': [
{
'location': 'home',
'address': 251,
'street': 'Maverick Dr.'
},
{
'location': 'work',
'address': 4532,
'street': 'Fulton Cir.'
},
]
},
]
Run Code Online (Sandbox Code Playgroud)
我试图将数据结构中的所有地址字段提取到扁平的字典列表中。
from glom import glom as glom …
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数据对象:
data = {
'props': {
'items': [
{'name': 'a', 'content': 'plain'},
{'name': 'b', 'content': {'id': 'x'}},
{'name': 'c', 'content': {'id': 'y'}},
]
}
}
Run Code Online (Sandbox Code Playgroud)
使用glom
,我想获得等于的项目x
的值。id
name
b
到目前为止,我有这个:
from glom import glom
from glom import SKIP
glom(data, ('props.items', [lambda i: i if i['name']=='b' else SKIP]))
Run Code Online (Sandbox Code Playgroud)
返回:
[{'name': 'b', 'content': {'id': 'x'}}]
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚使用什么规范(用glom
说法)来提取返回列表中的唯一元素,然后提取id
.
我可以调用 glom 两次:
glom(glom(data, ('props.items', [lambda i: i if i['name']=='b' else SKIP]))[0], 'content.id')
Run Code Online (Sandbox Code Playgroud)
但我认为应该有一种方法可以在一个电话中做到这一点。关于如何实现这一目标的任何想法?
我正在使用glom项目.
有没有办法转换[{"id": 1, "name": "foo"}, {"id": 2, "name": "bar"}]
成{1: "foo", 2: "bar"}
?