> pip install qdict
Exécute une requête sur un Iterable (List[dict], dict, List[Tuple[key, value]]) et applique le filtre.
Le filtre est appliqué horizontalement suite à l'itération des clés de requête, c'est-à-dire que lorsque la requête possède une clé et que cette clé n'est pas un opérateur et que sa valeur est un dictionnaire, ce dictionnaire est isolé de l'intérieur de la requête et de l'objet à vérifier. .
Attention : Si l'objet ne possède pas la clé spécifiée dans la requête, l'objet ne sera pas renvoyé dans les résultats finaux.
Tous les opérateurs respectent le niveau des objets.
$or : liste des requêtes.
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 : expression négative
{ "a" : { "$not" : 1 }}
$custom : Définit une méthode dynamiquement. (func, nom-clé1, nom-clé2, ..., nom-cléN). Chaque nom de clé sera un paramètre avec la valeur de clé ou Aucun
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 : vérifie si l'objet contient la clé
$contient : Si la liste (objet) contient l'élément (requête)
$in : Si la valeur (objet) est contenue dans la liste (requête)
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}]