Skip to main content
https://img.shields.io/pypi/v/pytups.svg https://img.shields.io/pypi/l/pytups.svg https://img.shields.io/pypi/pyversions/pytups.svg https://travis-ci.org/pchtsp/pytups.svg?branch=master

What and why

The idea is to allow sparse operations to be executed in matrix data.

I grew used to the chained operations in R’s tidyverse packages or, although not a great fan myself, python’s pandas . I find myself using dictionary and list comprehensions all the time to pass from one data format to the other efficiently. But after doing it for the Nth time, I thought of automaticing it.

In my case, it helps me construct optimisation models with PuLP. I see other possible uses not related to OR.

I’ve implemented some additional methods to regular dictionaries, lists and sets to come up with interesting methods that somewhat quickly pass from one to the other and help with data wrangling.

In order for the operations to make any sense, the assumption that is done is that whatever you are using has the same ‘structure’. For example, if you a have a list of tuples: every element of the list is a tuple with the same size and the Nth element of the tuple has the same type, e.g. [(1, 'red', 'b', '2018-01'), (10, 'ccc', 'ttt', 'ff')]. Note that both tuples have four elements and the first one is a number, not a string. We do not check that this is consistent.

They’re made to always return a new object, so no “in-place” editing, hopefully.

Right now there are three classes to use: dictionaries, tuple lists and ordered sets.

Python versions

Python 3.6 and up.

Quick example

We index a tuple list according to some index positions.:

import pytups as pt
some_list_of_tuples = [('a', 'b', 'c', 1), ('a', 'b', 'c', 2), ('a', 'b', 'c', 45)]
tp_list = pt.TupList(some_list_of_tuples)
tp_list.to_dict(result_col=3)
# {('a', 'b', 'c'): [1, 2, 45]}
tp_list.to_dict(result_col=3).to_dictdict()
# {'a': {'b': {'c': [1, 2, 45]}}}
tp_list.to_dict(result_col=[2, 3])
# {('a', 'b'): [('c', 1), ('c', 2), ('c', 45)]}

We do some operations on dictionaries with common keys.:

import pytups as pt
some_dict = pt.SuperDict(a=1, b=2, c=3, d=5)
some_other_dict = pt.SuperDict(a=5, b=7, c=1)
some_other_dict + some_dict
# {'a': 6, 'b': 9, 'c': 4}
some_other_dict.vapply(lambda v: v**2)
# {'a': 25, 'b': 49, 'c': 1}
some_other_dict.kvapply(lambda k, v: v/some_dict[k])
# {'a': 5.0, 'b': 3.5, 'c': 0.3333333333333333}

Installing

pip install pytups

or, for the development version:

pip install https://github.com/pchtsp/pytups/archive/master.zip

Testing

Run the command:

python -m unittest discover -s tests

if the output says OK, all tests were passed.

Download files

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

Source Distribution

pytups-0.80.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

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

pytups-0.80.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file pytups-0.80.0.tar.gz.

File metadata

  • Download URL: pytups-0.80.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for pytups-0.80.0.tar.gz
Algorithm Hash digest
SHA256 9c14a577501f948955021e5d003dc5faecfede0c92c4386c28f7259f68a069d3
MD5 356439bf76247d87c95a29fb03826c08
BLAKE2b-256 1649d1936265566b88c9a55ce157735239b7cb40d7281b21a349ada4bbae9267

See more details on using hashes here.

File details

Details for the file pytups-0.80.0-py3-none-any.whl.

File metadata

  • Download URL: pytups-0.80.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6

File hashes

Hashes for pytups-0.80.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d54b27a73900d69d20efe7b5e90cbd2a0e5459637c46d0c6bdb782bb2f07959f
MD5 c99d2464dbfef159b3afdecb75e8c246
BLAKE2b-256 921c7136b25d9f98f043f4fad1d624470884d2449c0f8352595a2c7ea23a99ed

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.0

2 files

0.88.1

2 files

0.87.3

2 files

0.87.1

2 files

0.86.2

2 files

0.86.1

2 files

0.86.0

2 files

0.85.0

2 files

0.84.0

2 files

0.83.0

2 files

0.82.0

2 files

0.81.1

2 files

0.81.0

2 files

This release

0.80.0 This release

2 files

0.9.0

2 files

0.7

2 files

0.6

2 files

0.5

2 files

0.4

2 files

0.3

2 files

0.2

2 files

0.1

2 files

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