如何筛选列表中嵌套DICT中的值?

2024-10-01 17:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的内容结构:

content = [
{'@type': 'ListItem', 'position': 1, 
   'item': 
    {'@type': 'Product', 'url': 'TestSample', 'sku': 'HO6096863EAD7E0PH', 'mpn': 'HO6096863EAD7E0PH', '@id': 'HO6096863EAD7E0PH'}},
 {'@type': 'ListItem', 'position': 2, 
   'item': 
    {'@type': 'Product', 'url': 'TestSample', 'sku': 'HO5FFFA64882401PH', 'mpn': 'HO5FFFA64882401PH', '@id': 'HO5FFFA64882401PH'}}
]

我需要使用键“url”获取所有值。我使用了这样的循环,它可以工作,但如何使它更容易?我读过函数“filter”,但不确定它是否适合我的情况

for r in content:
    k = r.get('item', {}).get('url')
    print(k)

输出应该是:TestSample,TestSample


Tags: idurl内容gettypepositioncontentproduct
2条回答

过滤器用于从iterable中过滤元素,您可以获得具有匹配条件的元素

但是如果你想从元素中得到子元素,你可以使用map函数

检查以下示例,此处lambda函数将从每个项目获取url,map将在列表中的每个dict上应用此lambda函数:

l = list(map(lambda x:x['item']['url'],content))
print(l)

输出为:

['TestSample', 'TestSample']

你的意思是map而不是filter

items = map(lambda x: x.get('item', {}).get('url'), content)
for item in items:
    print(item)

上面的代码将打印:

TestSample
TestSample

如果您想要一个带有filter的示例:

filtered = filter(lambda x: 'item' in x and 'url' in x['item'], content)
items = map(lambda x: x['item']['url'], filtered)
for item in items:
    print(item)

过滤器所做的是检查“item”和“url”是否在该字典值中,如果是,则将其添加到结果中,如果不是,则不会添加。通过这种方式,您可以确保filtered始终同时具有itemurl

相关问题 更多 >

    热门问题