我有一个数组:
array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
有什么好方法可以检查键值对 ('a', 5) 是否在此数组中。
我有一个数组:
array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
有什么好方法可以检查键值对 ('a', 5) 是否在此数组中。
In [61]: any(d.get('a', None) == 5 for d in array)
Out[61]: True
将其包装成一个函数:
In [64]: check = lambda arr, (k, v): any(d.get(k, None) == v for d in arr)
In [65]: check(array, ('a', 5))
Out[65]: True
In [66]: check(array, ('z', 5))
Out[66]: False
In [88]: array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
In [89]: if any(d['a'] == 5 for d in array):
....: print True
....:
True
或者你可以写类似
In [96]: array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
In [97]: def check_pair(k, v, l):
....: for elem in l:
....: if elem.has_key(k) and elem[k] == v:
....: return True
....: return False
....:
In [98]: check_pair('a', 5, array)
Out[98]: True
In [99]: check_pair('a', 11, array)
Out[99]: False
无需遍历字典中的所有元素,您只需按键索引并检查该值是否等于查询的值,但是,您必须遍历数组元素
>>> array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
>>> foo = lambda k, v:any(e.get(k, None) == v for e in array)
>>> foo('a',5)
True
>>> foo('a',6)
False
>>> foo('b',5)
False
>>>
一种更广泛的方法,可以提取所需对所在的确切字典。
>>> array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
>>> for d in array:
if ('a', 5) in d.items():
#your code here
你可以提取第一个让你对的字典。
desired_dict = [d for d in array if ('a', 5) in d.items()][0]
或它们的列表:
desired_dicts = [d for d in array if ('a', 5) in d.items()]
python 3.2
[(m,n) for i in array for m,n in i.items() if (m,n)==('a',5)]