从字典列表中查找值,其中dicts具有不同数量的键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从字典列表中查找值,其中dicts具有不同数量的键相关的知识,希望对你有一定的参考价值。
我有一个字典列表,其中包含不同数量的键/值,我无法更改列表,因为它是从另一个我无法控制的程序中提取的:
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']
但这只是一个空列表[]。
帮助赞赏。
答案
如果密钥查找失败,您可以使用dict.get
来提供值:
[i['a'] for i in l if i.get('c') == 'approved']
# [123, 678]
另一答案
你可以像这样修改你的答案(检查“c”是否在keys
的dict
中:
approved_list = [i['a'] for i in l if "c" in i.keys() if i['c'] == 'approved' ]
另一答案
你的方法略有不正确
[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]
以上是关于从字典列表中查找值,其中dicts具有不同数量的键的主要内容,如果未能解决你的问题,请参考以下文章