从字典列表中获取键满足某个值的一定数量的项目

时间:2018-08-30 14:35:27

标签: python dictionary

假设我有以下字典列表:

my_list = [
           {'a': 1, 'b': 3, 'c': 0}, 
           {'a': 1, 'b': 5, 'c': -10}, 
           {'a': 1, 'b': 1, 'c': 1}, 
           {'a': 2, 'b': 0, 'c': 0}, 
           {'a': 1, 'b': 5, 'c': 0}
]

我需要从此列表中检索两个字典,其中键a = 1

我如何达到期望的结果?

2 个答案:

答案 0 :(得分:4)

找到所需的两个字典后,可以使用itertools.islice来避免遍历整个输入列表

from itertools import islice

a, b = islice((d for d in my_list if d.get('a') == 1), 2)

答案 1 :(得分:1)

我会寻求一个明确的解决方案:

def a_is_1(d):
    return d.get('a') == 1

dicts = filter(a_is_1, my_list)

假设,您可以解压缩两个字典:

a, b, *rest = dicts

否则,请尽可能多地获取

result = islice(dicts, 0, 2)

每一步都做一件事,而且可读性强。

如果您希望此步骤获取更多键和值,可以使用闭包:

def kv_filter(k, v):
    def _(d):
        return d.get(k) == v
    return _

然后:

dicts = filter(kv_filter('a', 1), my_list)

其余的都一样。