Python有效地从字典列表中获取特定值

Python有效地从字典列表中获取特定值,python,Python,我使用API从以JSON格式返回的数据库中获取结果。然后我尝试提取某些键/值,并将它们附加到一个空白列表中。我想要的字段是eissn,API返回如下结果: [ {'type': 'doi', 'id': '10.16472/j.chinatobacco.2017.045'}, {'type': 'pissn', 'id': '1004-5708'}, {'type': 'eissn', 'id': '1004-5708'} ] 我想提取我使用以下代码尝试的eissn id: deissnl

我使用API从以JSON格式返回的数据库中获取结果。然后我尝试提取某些键/值,并将它们附加到一个空白列表中。我想要的字段是eissn,API返回如下结果:

[
{'type': 'doi', 'id': '10.16472/j.chinatobacco.2017.045'}, 
{'type': 'pissn', 'id': '1004-5708'}, 
{'type': 'eissn', 'id': '1004-5708'}
]
我想提取我使用以下代码尝试的eissn id:

deissnlist = []
for i in range(0,lengthD):
    deissnlist.append(doajresult[i]['bibjson']['identifier'][3] 
    ['id'])
其中lengthD/i是从API返回的结果数。问题是eissn ID并不总是列表中的第三个字典。是否有任何方法可以搜索元组并仅获取eissn ID而不使用另一个for循环(从而从O(n)到O(n^2)?预期的输出只是eissn ID的单个值(在本例中为1004-5708)


我尝试将列表转换为字典,但没有成功,因为它将每个元组视为自己的字典。谢谢!

我可能误解了这个问题,过于简化了;但是,如果您只是想从该示例输入中提取ID列表,我会这样做:

input = [
    {'type': 'doi', 'id': '10.16472/j.chinatobacco.2017.045'},
    {'type': 'pissn', 'id': '1004-5708'},
    {'type': 'eissn', 'id': '1004-5708'}
]

result = [x.get('id') for x in input]

print(result)

['10.16472/j.chinatobacco.2017.045', '1004-5708', '1004-5708']
或者仅针对类型为eissn的ID:

result = [x.get('id') for x in input if x.get('type') == 'eissn']

这里没有元组,您的代码无法运行,并且您没有向我们显示预期的输出。这很好,但我只需要第三个ID(其中type='eissn')太棒了。听写理解是猫的叫声。对于复杂的,我仍然写循环然后重构,但我的大脑开始用压缩语法思考。我对很多编程概念都很在行,但听写理解对我来说一直很困难。我认为这一页非常有用,而且不太冗长。把它分解为into我一直喜欢的基本伪语法(即[list if condition中项的表达式]):这太棒了!非常感谢!希望我能不止一次投票给你。