给出此地图
r = {
'items': [
{
'id': '1',
'name': 'foo'
},
{
'id': '2',
'name': 'bar'
}
]
}
我正在尝试获取'name'=='foo'的'id'。我有这个:
Id = [api['id'] for api in r['items'] if 'foo' in api['name']]
然后Id == ['1']
。我希望它=“ 1”。我可以这样做:
Id = [api['id'] for api in r['items'] if 'foo' in api['name']][0]
但这似乎是一种解决方法。有没有一种方法可以只传递api['id']
的值而不传递列表中的值?
答案 0 :(得分:0)
您可以使用generator:
Id = next(api['id'] for api in r['items'] if api['name'] == 'foo')
另一个好处是,一旦遇到匹配的对象,迭代将立即停止,而原始代码将处理所有原始列表并创建一个新列表,仅提取其第一个元素。