qdict
1.0.0
> pip install qdict
Iterable (List[dict], dict, List[Tuple[key, value]]) に対してクエリを実行し、フィルターを適用します。
フィルターはクエリ キーの反復に続いて水平方向に適用されます。つまり、クエリにキーがあり、このキーが演算子ではなく、その値が辞書である場合、この辞書はクエリおよびチェック対象のオブジェクト内から分離されます。 。
注意: オブジェクトにクエリで指定されたキーがない場合、そのオブジェクトは最終結果で返されません。
すべての演算子はオブジェクトのレベルを尊重します。
$or : クエリのリスト。
from qdict import find
obj = [{ "a" : 1 , "b" : { "c" : "Positive" }}, { "a" : 1 , "b" : { "c" : "Negative" }},
{ "a" : 1 , "b" : { "c" : "Undefined" }}, { "a" : 1 }]
result = find ( obj , {
"$or" : [{ "b" : { "c" : "Positive" }},
{ "$not" : { "$has" : "b" }}]
})
r = list ( result )
print ( r ) # [{'a': 1, 'b': {'c': 'Positive'}}, {'a': 1}]
$not : 否定的な表現
{ "a" : { "$not" : 1 }}
$custom : メソッドを動的に定義します。 (関数、キー名 1、キー名 2、...、キー名 N)。各キー名は、キー値または None を持つパラメーターになります。
from qdict import find
obj = [
{ "a" : 1 , "b" : True , "c" : { "a" : 1 }, "d" : { "a" : 1 }},
{ "a" : 3 , "b" : False , "c" : { "a" : 6 }}
]
def pair ( num ):
return num % 2 == 0
query = {
"c" : { "$custom" : ( pair , "a" )}
}
print ( list ( find ( obj , query ))) # [{"a": 3, "b": False, "c": {"a": 6}}]
$has : オブジェクトにキーが含まれているかどうかを確認します
$contains : リスト (オブジェクト) に項目 (クエリ) が含まれる場合
$in : 値(オブジェクト)がリスト(クエリ)に含まれる場合
from qdict import find
# simple search
obj = [{ "a" : 1 , "b" : False }, { "a" : 2 , "b" : True }, { "b" : True }]
result = find ( obj , { "b" : True })
print ( list ( result )) # [{'a': 2, 'b': True}, {'a': 3, 'b': True}]
result = find ( obj , { "$has" : "a" })
print ( list ( result )) # [{'a': 1, 'b': False}, {'a': 2, 'b': True}]
result = find ( obj , { "$not" : { "$has" : "a" }})
print ( list ( result )) # [{'b': True}]
# search with subkeys
obj = [{ "a" : 1 , "b" : { "c" : "Positive" }}, { "a" : 1 , "b" : { "c" : "Negative" }},
{ "a" : 1 , "b" : {}}]
result = find ( obj , { "b" : { "c" : "Negative" }})
print ( list ( result )) # [{'a': 1, 'b': {'c': 'Negative'}}]
# $or
obj = [{ "a" : 1 , "b" : { "c" : "Positive" }}, { "a" : 1 , "b" : { "c" : "Negative" }},
{ "a" : 1 , "b" : { "c" : "Undefined" }}, { "a" : 1 }]
result = find ( obj , {
"$or" : [{ "b" : { "c" : "Positive" }},
{ "$not" : { "$has" : "b" }}]
})
print ( list ( result )) # [{'a': 1, 'b': {'c': 'Positive'}}, {'a': 1}]