Skip to main content

QyPy

Query list of dictionaries or objects as if you are filtering in DBMS. You can get dicts/objects that are matched by OR, AND or NOT or all of them.

Installation

pip install QyPy

Usage

from query import Q
l = [{"name":"John","age":"16"}, {"name":"Mike","age":"19"},{"name":"Sarah","age":"21"}]
filtered= Q(l,{'name__contains':"k", "age__lt":20})
print(list(filtered))

output

[{'name': 'Mike', 'age': '19'}]

The above filtration can be written as

from query import Q
l = [{"name":"John","age":"16"}, {"name":"Mike","age":"19"},{"name":"Sarah","age":"21"}]
filtered= Q(l,name__contains="k", age__lt = 20)

Notes:

  1. Q returns an iterator which can be converted to a list by calling list.
  2. Even though, age was str in the dict, as the value of in the query dict was int, QyPy converted the value in dict automatically to match the query data type. This behaviour can be stopped by passing False to convert_types parameter.

Supported filters

  • eq: equals and this default filter
  • gt: greater than.
  • gte: greater than or equal.
  • lt: less than
  • lte: less than or equal
  • in: the value in a list of a tuple.
    • e.g. age__in=[10,20,30]
  • contains: contains a substring as in the example.
  • icontains: case-insensitive contains.
  • startswith: checks if a value starts with a query strings.
  • istartswith: case-insensitive startswith.
  • endswith: checks if a value ends with a query strings.
  • iendswith: case-insensitive endswith.
  • isnull: checks if the value matches any of NULL_VALUES which are ('', '.', None, "None", "null", "NULL")
    • e.g. filter__isnull=True or filter__isnull=False

For eq,gt,gte,lt,lte, in, contains, icontains, startswith,istartswith, endswith and iendswith, you can add a n to negate the results. e.g nin which is equivalent to not in

Advanced examples

This section will cover the use of OR, AND and NOT

Usage of OR

OR or __or__ takes a list of dictionaries to evaluate and returns with the first True.

from query import Q
l = [{"name":"John","age":"16"}, {"name":"Mike","age":"19"},{"name":"Sarah","age":"21"}]
filtered= Q(l,{"OR":[{"name__contains":"k"}, {"age__gte":21}]})
print(list(filtered))

output

[{'name': 'Mike', 'age': '19'}, {'name': 'Sarah', 'age': '21'}]

Usage of NOT

NOT or __not__ takes a dict for query run.

from query import Q
l = [{"name":"John","age":"16"}, {"name":"Mike","age":"19"},{"name":"Sarah","age":"21"}]
filtered= Q(l,{"age__gt":15, "NOT":{"age__eq":19}})
print(list(filtered))

output

[{'name': 'John', 'age': '16'}, {'name': 'Sarah', 'age': '21'}]

Usage of AND

AND or __and__ takes a list of dict for query run, returns with the first False.

from query import Q
l = [{"name":"John","age":"16"}, {"name":"Mike","age":"19"},{"name":"Sarah","age":"21"}]
filtered= Q(l,{"__and__":[{"age__gte":15},{"age__lt":21}]})
print(list(filtered))

output

[{'name': 'John', 'age': '16'}, {'name': 'Mike', 'age': '19'}]

Metadata

Release files for QyPy 0.9.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for QyPy 0.9.2
File Size Uploaded
QyPy-0.9.2.tar.gz 7.4 kB Details

Release files / QyPy-0.9.2.tar.gz

Download URL QyPy-0.9.2.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
3f15b975eaa9291f71ee9a6ed8f8e59e04e97b309069b6483d5ff67a3b9dc773
BLAKE2b-256 checksum
How to use checksums
1c87df0be49ec54c8f5c124abd2063cac824768915d116c3faef6d316227a9bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 colorama/0.4.4 importlib-metadata/4.6.4 keyring/23.5.0 pkginfo/1.8.2 readme-renderer/34.0 requests-toolbelt/0.9.1 requests/2.25.1 rfc3986/1.5.0 tqdm/4.57.0 urllib3/1.26.5 CPython/3.10.6

Release history Release notifications | RSS feed

This release

0.9.2 This release

1 release file

0.9.1

1 release file

0.9.0

1 release file

0.8.0

1 release file

0.7.2

1 release file

0.7.1

1 release file

0.6.1

1 release file

0.5.1

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page