> pip install qdict
ينفذ استعلامًا على Iterable (List[dict], dict, List[Tuple[key, value]]) ويطبق عامل التصفية.
يتم تطبيق عامل التصفية أفقيًا بعد تكرار مفاتيح الاستعلام، أي عندما يكون للاستعلام مفتاح وهذا المفتاح ليس عاملاً وقيمته عبارة عن قاموس، يتم عزل هذا القاموس من داخل الاستعلام والكائن المراد فحصه .
تنبيه: إذا لم يكن الكائن يحتوي على المفتاح المحدد في الاستعلام، فلن يتم إرجاع الكائن في النتائج النهائية.
جميع المشغلين يحترمون مستوى الأشياء.
$ أو : قائمة الاستعلامات.
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 : يحدد الطريقة ديناميكيًا. (فونك، keyname1، keyname2، ...، keynameN). سيكون كل اسم مفتاح عبارة عن معلمة بقيمة المفتاح أو لا شيء
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 : يتحقق مما إذا كان الكائن يحتوي على المفتاح
يحتوي على $ : إذا كانت القائمة (الكائن) تحتوي على العنصر (الاستعلام)
$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}]