【发布时间】:2021-11-21 12:50:16
【问题描述】:
您好,我无法过滤此词典列表。我试图到达的是 all_assets 列表中的 'attributes' 字典并通过(例如)Background: Star 的值对其进行过滤。我目前的尝试是使用 filter() 和 lambda 函数。
到目前为止,我所拥有的是:
all_assets = [{'dateListed': 58391,
'id': '118572',
'metadata': {'files': [],
'mediaType': 'image/png',
'name': 'The three',
'tags': [{'right': '101 Galaxy'},
{'attributes': {'Background': 'Mars',
'Body': 'Rough',
'Face': 'Dumb',
'Headwear': 'Helmet'}}],
'thumbnail': 'something'},
'Session': None,
'police': 'pewpew',
'verified': {'project': 'Thes', 'verified': True}},
{'dateListed': 430298239,
'id': '1191281',
'metadata': {'files': [],
'mediaType': 'image/png',
'name': 'TheOne',
'tags': [{'right': '101 Galaxy'},
{'attributes': {'Background': 'Star',
'Body': 'Smooth',
'Face': 'Fresh',
'Headwear': 'Cap'}}],
'thumbnail': 'something'},
'Session': None,
'police': 'pewpew',
'verified': {'project': 'Thes', 'verified': True}}]
search_attribute = 'Background'
search_attribute_value = 'Star'
filtered = filter(lambda i: any(d.get(search_attribute, 'xxx') == search_attribute_value for d in i['metadata']['tags']['attributes']), all_assets)
# print(list(filtered))
输出应该是因为搜索属性是星号:
{'dateListed': 430298239,
'id': '1191281',
'metadata': {'files': [],
'mediaType': 'image/png',
'name': 'TheOne',
'tags': [{'right': '101 Galaxy'},
{'attributes': {'Background': 'Star',
'Body': 'Smooth',
'Face': 'Fresh',
'Headwear': 'Cap'}}],
'thumbnail': 'something'},
'Session': None,
'police': 'pewpew',
'verified': {'project': 'Thes', 'verified': True}}]
那么我想要对过滤后的列表做的是打印出一些值 比如“id”、“name”和“headwear”。
for x in filtered:
id = (x.get('id'))
name = (x.get('metadata')('name'))
headwear = (x.get('metadata')('tags')('attributes')('Headwear'))
print(f'ID: {id}')
print(f'Name: {name}')
print(f'Headwear: {headwear}')
我试图得到这个输出:
ID: 1191281
Name: TheOne
Headwear: Cap
我对 python 的这个领域有些陌生,因为我只知道一点 lambda 函数。很抱歉,如果它是一个愚蠢的问题或什么的。
【问题讨论】:
标签: python list dictionary lambda generator-expression