我有一个包含不同数量的键/值的字典列表,我无法更改该列表,因为它是从另一个我无法控制的程序中提取的:
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']
但这只是一个空列表[]。
帮助表示赞赏。
答案 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]