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 : กำหนดวิธีการแบบไดนามิก (func, 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 : ตรวจสอบว่าวัตถุมีรหัสหรือไม่
$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}]