> pip install qdict
Führt eine Abfrage für ein Iterable (List[dict], dict, List[Tuple[key, value]]) aus und wendet den Filter an.
Der Filter wird horizontal nach der Iteration der Abfrageschlüssel angewendet, d. h. wenn die Abfrage einen Schlüssel hat und dieser Schlüssel kein Operator ist und sein Wert ein Wörterbuch ist, wird dieses Wörterbuch von der Abfrage und dem zu prüfenden Objekt isoliert .
Achtung: Wenn das Objekt nicht über den in der Abfrage angegebenen Schlüssel verfügt, wird das Objekt nicht in den Endergebnissen zurückgegeben.
Alle Operatoren respektieren die Ebene der Objekte.
$or : Liste der Abfragen.
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 : negativer Ausdruck
{ "a" : { "$not" : 1 }}
$custom : Definiert eine Methode dynamisch. (func, Schlüsselname1, Schlüsselname2, ..., SchlüsselnameN). Jeder Schlüsselname ist ein Parameter mit dem Schlüsselwert oder „Keine“.
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 : prüft, ob das Objekt den Schlüssel enthält
$contains : Wenn die Liste (Objekt) das Element (Abfrage) enthält
$in : Wenn der Wert (Objekt) in der Liste (Abfrage) enthalten ist
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}]