假设我有以下字典列表:
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
我如何达到期望的结果?
答案 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)
其余的都一样。