从字典列表中查找值,其中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”是否在keysdict中:

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具有不同数量的键的主要内容,如果未能解决你的问题,请参考以下文章

8.字典dict和解构-封装

从 NSDictionary 获取包含 NSNumber 布尔值的键列表,其中值为 @YES

使用过滤器方法并从给定字典中查找值在 5 到 8 之间的键

在字典中查找重复列表并打印重复列表的键

获取字典最小值的键,而该键在数组中

Python - 从包含值列表的字典中添加具有映射值的新列