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

时间:2018-09-21 15:05:40

标签: python list dictionary select

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

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']

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

帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

如果键查找失败,则可以使用dict.get来提供一个值:

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

答案 1 :(得分:0)

您可以按照以下方式修改答案(检查keys的{​​{1}}中是否包含“ c”:

dict

答案 2 :(得分: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]