Skip to main content

pylookups

Excel-style lookup, filter, and sort functions for plain Python lists — no pandas or numpy required.

pip install pylookups

The install name is pylookups, but the import name is pylookup:

from pylookup import vlookup, xlookup, match, index, index_match, filter, unique, sort

Note: filter shadows Python's built-in filter in any module that imports it by name. If you still need the built-in in the same file, use the namespaced style instead:

import pylookup as pl

pl.filter([1, 2, 3, 4], lambda x: x > 2)

Install (local development)

python -m venv .venv
.venv\Scripts\activate        # Windows
pip install -e ".[dev]"
pytest

Functions

Row/column positions follow Excel's convention: 1-based, not 0-based.

match(lookup_value, lookup_array, match_type=0)

Position (1-based) of lookup_value in lookup_array. match_type: 0 exact, 1 largest value <= target (ascending array), -1 smallest value >= target (descending array). Raises NotFoundError.

index(array, row_num, col_num=None)

Value at row_num (and col_num for a 2D table). Omit col_num to get the whole row.

index_match(return_array, lookup_value, lookup_array, match_type=0)

index + match combined: find lookup_value in lookup_array, return the item at that position in return_array.

vlookup(lookup_value, table, col_index, exact=True)

Search the first column of table (list of rows) for lookup_value, return the value at col_index of the matching row.

hlookup(lookup_value, table, row_index, exact=True)

Search the first row of table for lookup_value, return the value at row_index of the matching column.

xlookup(lookup_value, lookup_array, return_array, if_not_found=None, match_mode=0, search_mode=1)

Search lookup_array for lookup_value, return the corresponding item from return_array. match_mode: 0 exact, -1 exact or next smaller, 1 exact or next larger. search_mode: 1 first-to-last, -1 last-to-first. Returns if_not_found instead of raising when nothing matches.

filter(array, condition, if_empty=None)

Keep items where condition is true. condition is a predicate function or a boolean list the same length as array.

unique(array, keep="first")

Distinct items, order preserved. keep="last" keeps the last occurrence instead of the first.

sort(array, by=None, key=None, reverse=False)

Sort a flat list, or a 2D table by column by (1-based). key overrides both with a custom function.

Example

table = [
    ["id", "name", "score"],
    [1, "alice", 90],
    [2, "bob", 75],
    [3, "carol", 60],
]

vlookup(2, table, 2)                     # "bob"
xlookup(3, [1, 2, 3], ["a", "b", "c"])   # "c"
sort(table[1:], by=3, reverse=True)      # highest score first (skip header row)

See src/examples/basic.py for more.

Publishing to PyPI

pip install build twine
python -m build
twine upload dist/*

Metadata

Release files for pylookups 0.1.0

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

Source distribution (sdist)

Source distribution for pylookups 0.1.0
File Size Uploaded
pylookups-0.1.0.tar.gz 6.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pylookups 0.1.0
File Interpreter ABI Platform
pylookups-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.6 kB

Release files / pylookups-0.1.0.tar.gz

Download URL pylookups-0.1.0.tar.gz
Size 6.3 kB
Tags Source
SHA-256 checksum
How to use checksums
203e1bb792c05b1af4f0ff42c37c2b96fdbb07bb138b26b9ab677debbf17e9bc
BLAKE2b-256 checksum
How to use checksums
f05d515320efd44b81d359eed1fdebf4592278111a9066b26818ae817945388d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / pylookups-0.1.0-py3-none-any.whl

Download URL pylookups-0.1.0-py3-none-any.whl
Size 7.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da1ef5548036fbd5f76cff2f4dd20b4b7d432af4cd861e967eee01698989a3f0
BLAKE2b-256 checksum
How to use checksums
7d3057bede390207586fe3f3459dfc5ae9f929d68c9aca5909d8dc82734b21f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release 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