从字典列表中查找值,其中dicts具有不同数量的键

问题描述 投票:-1回答:3

我有一个字典列表,其中包含不同数量的键/值,我无法更改列表,因为它是从另一个我无法控制的程序中提取的:

l = [{'a': 123, 'b': 234, 'c': 'approved'}, {'a': 456, 'b': 567}, {'a': 678, 'b': 789, 'c': 'approved'}]

我想得到一个键'a'的值列表,其中键'c'=='已批准',如果我尝试:

approved_list = [i['a'] for i in l if i['c'] == 'approved']

我得到错误:KeyError: 'c'我假设因为dict [1]没有键'c'。

我试图让字典列表只包含那些带有键'c'的字典:

dicts_with_approval = [i for i in l if i.keys() == 'c']

但这只是一个空列表[]。

帮助赞赏。

python list dictionary select
3个回答
3
投票

如果密钥查找失败,您可以使用dict.get来提供值:

[i['a'] for i in l if i.get('c') == 'approved']
# [123, 678]

0
投票

你可以像这样修改你的答案(检查“c”是否在keysdict中:

approved_list = [i['a'] for i in l if "c" in i.keys() if i['c'] == 'approved' ]

0
投票

你的方法略有不正确

[i for i in l if i.keys() == 'c'] 

您正在尝试检查i.keys()列表是否等于单个关键元素c,它永远不会成立。因此,它应该是另一种方式,你需要检查字典c中是否存在密钥i.keys()

更改为现有代码

[i['a'] for i in l if 'c' in i.keys() and 'approved'==i['c']] # [123, 678]
© www.soinside.com 2019 - 2024. All rights reserved.