Python 3.x 从映射列表中获取单个键值

Python 3.x 从映射列表中获取单个键值,python-3.x,Python 3.x,根据这张地图 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”

根据这张地图

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']
的值,而不是列表中的值?

您可以使用:

Id=next(如果api['name']=='foo',则r['items']中的api的api['Id']

另一个好处是,当您遇到匹配对象时,迭代将立即停止,而您的原始代码将处理所有原始列表并创建一个新的列表,只提取其第一个元素。

由于您使用的是列表理解,因此
Id
的输出应该是一个列表,因此,如果只有一个元素,那么它就是这个
Id=['1']
。如果您知道只有一个
Id
具有
名称“foo”
,那么您可以使用for循环。因此,如果您的条件为真,则Id将保存到
Id
变量中,否则不会。这是否回答了您的问题?