1

私は配列を持っています:

array = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]

キーと値のペア ('a', 5) がこの配列にあるかどうかを確認できる良い方法はありますか?

4

5 に答える 5

4
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
于 2012-12-11T08:21:40.037 に答える
2
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
于 2012-12-11T08:22:11.617 に答える
2

ディクショナリ内のすべての要素を反復処理する代わりに、キーでインデックスを作成し、値がクエリされた値と等しいかどうかを確認できますが、それでも配列要素を反復処理する必要があります

>>> 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
>>> 
于 2012-12-11T08:23:01.443 に答える
1

より広範な方法で、目的のペアが存在する正確な辞書を抽出できます。

>>> 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()]
于 2012-12-11T08:23:33.970 に答える
0
     python 3.2

     [(m,n) for i in array for m,n in i.items() if (m,n)==('a',5)]
于 2012-12-11T14:58:11.427 に答える