Skip to main content

This python on package simplifies the manipulation with the lists of multi-dimensional dictionaries as select, filter or join

Project description

GitHub GitHub Workflow Status (with branch) Coverage PyPI - Downloads

Introduction

This Python package provides a straightforward way to manipulate lists of multi-dimensional dictionaries. It includes support for the following core operations:

  • Attribute Selection: Easily select specific attributes from your data and nested attributes.
  • Record Filtering: Filter records based on custom conditions using a simple syntax.
  • List Joining: Perform joins between lists of dictionaries based on a defined key.
  • Aggregation: Aggregation function as count and count_distinct to summarize the data.

The package is designed for handling small to medium-sized datasets, offering convenience and simplicity. However, it is not optimized for large-scale big data processing.

Getting Started

The package is available on the PyPi and can be installed by the following command:

pip install surquest-utils-qdict

Once the package is installed you can start using it by importing the qdict module:

from surquest.utils.qdict import Dataset, Attribute as Attr, AND, OR

# Create the edicto dataset
authors = edicto.Dataset([
    {'id': 1, 'name': 'Charles Dickens', 'yearOfBirth': 1812, 'yearOfDeath': 1870, 'location': {'city': 'London', 'country': 'UK'}},
    {'id': 2, 'name': 'Jane Austen', 'yearOfBirth': 1775, 'yearOfDeath': 1817, 'location': {'city': 'Steventon', 'country': 'UK'}},
    {'id': 3, 'name': 'Mark Twain', 'yearOfBirth': 1835, 'yearOfDeath': 1910, 'location': {'city': 'Florida', 'country': 'USA'}},
    {'id': 4, 'name': 'Ernest Hemingway', 'yearOfBirth': 1899, 'yearOfDeath': 1961, 'location': {'city': 'Oak Park', 'country': 'USA'}},
    {'id': 5, 'name': 'F. Scott Fitzgerald', 'yearOfBirth': 1896, 'yearOfDeath': 1940, 'location': {'city': 'St. Paul', 'country': 'USA'}}
])

# Select the attributes
authors.select("id", "name")

# Select the attributes and the nested attributes
authors.select(Attr("id"), Attr("name"), "location.country")

# Select the attributes and the nested attributes 
authors.select(Attr("id"), Attr("name"), Attr("location").get("country"))

# Select the attributes and the nested attributes and alias the columns
authors.select(Attr("id"), Attr("name"), Attr("location").alias("loc").get("city").alias("town"))

# Filter the records
authors.filter(Attr("yearOfBirth") > 1800).select("id", "name")

# Complex filter
authors.filter(Attr("yearOfBirth") > 1800).filter(Attr("location.country") == "UK").select("id", "name")

# Join the datasets
books = edicto.Dataset([
    {'id': 1, 'title': 'A Tale of Two Cities', 'year': 1859, "author": {"id": 1}},
    {'id': 2, 'title': 'Great Expectations', 'year': 1861, "author": {"id": 1}},
    {'id': 3, 'title': 'Pride and Prejudice', 'year': 1813, "author": {"id": 2}},
    {'id': 4, 'title': 'Sense and Sensibility', 'year': 1811, "author": {"id": 2}},
    {'id': 5, 'title': 'Adventures of Huckleberry Finn', 'year': 1884, "author": {"id": 3}},
    {'id': 6, 'title': 'The Adventures of Tom Sawyer', 'year': 1876, "author": {"id": 3}},
    {'id': 7, 'title': 'The Old Man and the Sea', 'year': 1952, "author": {"id": 4}},
    {'id': 8, 'title': 'A Farewell to Arms', 'year': 1929, "author": {"id": 4}},
    {'id': 9, 'title': 'The Great Gatsby', 'year': 1925, "author": {"id": 5}},
    {'id': 10,'title': 'Tender Is the Night', 'year': 1934, "author": {"id": 5}}
])

authors.join(
    other=books,
    left_on="id",
    right_on="authorId",
    how="inner"
).select("name", "location.country", "title", "year")

Local development

You are more than welcome to contribute to this project. To make your start easier we have prepared a docker image with all the necessary tools to run it as interpreter for Pycharm or to run tests.

Build docker image

docker build `
     --tag surquest/utils/qdict `
     --file package.base.dockerfile `
     --target test .

Run tests

docker run --rm -it `
 -v "${pwd}:/opt/project" `
 -w "/opt/project/test" `
 surquest/utils/qdict pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

surquest_utils_qdict-0.0.1rc1.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

surquest_utils_qdict-0.0.1rc1-py2.py3-none-any.whl (7.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file surquest_utils_qdict-0.0.1rc1.tar.gz.

File metadata

  • Download URL: surquest_utils_qdict-0.0.1rc1.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.9.21

File hashes

Hashes for surquest_utils_qdict-0.0.1rc1.tar.gz
Algorithm Hash digest
SHA256 3b0d1534421e655a8325d05190e0b6609bb06348973de053441d6a04162016ba
MD5 d551071b9e7450c730ac65150156737e
BLAKE2b-256 9ae950735cfcb00a7e0b54449ab88acc636ffa6f9ff4f70c111941aefb75c6d5

See more details on using hashes here.

File details

Details for the file surquest_utils_qdict-0.0.1rc1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for surquest_utils_qdict-0.0.1rc1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 104a5e76e7ef6b5625898d3ccb44907709f1ab1fb5041b0b1d9e49ecd9c7400b
MD5 6e66d81b6477948e581a32481e7bc4a4
BLAKE2b-256 e7ca601d5714a481e753c02b5cc6782b45fcaedb22ad4c4a48514ad83e58bb56

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page