Skip to main content

Alter Ego


Aldict

tests Python 3.x PyPI License Downloads

Multi-key dictionary, supports adding and manipulating key-aliases pointing to shared values


How to use

  • initialize with aliases
    (one-liner with aliases dict mapping original key to alias keys)
ad = AliasDict({"a": 1, "b": 2}, aliases={"a": ["aa", "aaa"], "b": "bb"})
assert ad["a"] == ad["aa"] == ad["aaa"] == 1
assert ad["b"] == ad["bb"] == 2
  • add_alias
    (pass key as first parameter and alias(es) as variadic params, list or tuple)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
ad.add_alias("b", "bb", "Bbb")
ad.add_alias("a", ["aaa", "aaaa"])
ad.add_alias("b", ("bbb",))

assert ad["a"] == ad["aa"] == ad["aaa"] == ad["aaaa"] == 1
assert ad["b"] == ad["bb"] == ad["Bbb"] == ad["bbb"] == 2
  • remove_alias
    (pass alias(es) to be removed as variadic params, list or tuple)
ad.remove_alias("aa")
ad.remove_alias("bb", "Bbb")
ad.remove_alias(["aaa", "aaaa"])
ad.remove_alias(("bbb",))
assert len(ad.aliases()) == 0
  • clear_aliases
    (remove all aliases at once)
ad.clear_aliases()
assert len(ad.aliases()) == 0
  • update alias
    (point alias to different key)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "ab")
assert list(ad.items()) == [('a', 1), ('b', 2), ('ab', 1)]

ad.add_alias("b", "ab")
assert list(ad.items()) == [('a', 1), ('b', 2), ('ab', 2)]
  • read all aliases
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
ad.add_alias("b", "bb", "B")
ad.add_alias("a", "ab", "A")
assert list(ad.aliases()) == ['aa', 'bb', 'B', 'ab', 'A']
  • keys_with_aliases
    (read keys with corresponding alias(es))
assert dict(ad.keys_with_aliases()) == {'a': ['aa', 'ab', 'A'], 'b': ['bb', 'B']}
  • read dictviews
    (dict.keys() and dict.items() include aliased versions)
ad = AliasDict({"x": 10, "y": 20})
ad.add_alias("x", "Xx")
ad.add_alias("y", "Yy", "xyz")

ad.keys()
ad.values()
ad.items()

# dict_keys(['x', 'y', 'Xx', 'Yy', 'xyz'])
# dict_values([10, 20])
# dict_items([('x', 10), ('y', 20), ('Xx', 10), ('Yy', 20), ('xyz', 20)])
  • iterkeys
    (lazy iterator over all keys and aliases)
ad = AliasDict({"x": 10, "y": 20})
ad.add_alias("x", "Xx")

assert list(ad.iterkeys()) == ['x', 'y', 'Xx']
  • iteritems
    (lazy iterator over all items including alias/value pairs)
assert list(ad.iteritems()) == [('x', 10), ('y', 20), ('Xx', 10)]
  • remove key and aliases
ad.pop("y")
assert list(ad.items()) == [('x', 10), ('Xx', 10)]
  • origin_len
    (get original dict length without aliases)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
assert list(ad.keys()) == ["a", "b", "aa"]
assert len(ad) == 3
assert ad.origin_len() == 2
  • origin_keys
    (get original keys only)
assert list(ad.origin_keys()) == ['a', 'b']
  • origin_key
    (get original key for an alias)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
assert ad.origin_key("aa") == "a"
assert ad.origin_key("a") is None  # not an alias
  • is_alias
    (check if key is an alias)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
assert ad.is_alias("aa") is True
assert ad.is_alias("a") is False
  • has_aliases
    (check if key has any aliases)
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
assert ad.has_aliases("a") is True
assert ad.has_aliases("b") is False
  • copy
ad = AliasDict({"a": 1, "b": 2})
ad.add_alias("a", "aa")
ad_copy = ad.copy()
assert ad_copy == ad
assert ad_copy is not ad
  • merge with | and |= operators
ad1 = AliasDict({"a": 1}, aliases={"a": "aa"})
ad2 = AliasDict({"b": 2}, aliases={"b": "bb"})

merged = ad1 | ad2
assert merged["aa"] == 1
assert merged["bb"] == 2

ad1 |= {"c": 3}
assert ad1["c"] == 3
  • fromkeys
ad = AliasDict.fromkeys(["a", "b", "c"], 0, aliases={"a": "aa"})
assert ad["a"] == ad["aa"] == 0

Metadata

Release files for aldict 1.3.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 aldict 1.3.0
File Size Uploaded
aldict-1.3.0.tar.gz 5.3 kB Details

Built distribution (wheel)

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

Total release size: 11.2 kB

Release files / aldict-1.3.0.tar.gz

Download URL aldict-1.3.0.tar.gz
Size 5.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ed51273a037538ee1f4e466d4ca6eaacb1fcca9b8f0e8628b62edaa117386ec3
BLAKE2b-256 checksum
How to use checksums
df8063a165e56c8047990783ecbffb04ede588ff85896752b2c3694223621e26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.12

Release files / aldict-1.3.0-py3-none-any.whl

Download URL aldict-1.3.0-py3-none-any.whl
Size 6.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7e061bf5b734da6a6eac989dfa0d6fd2b477dcd5d6ee399801b9f5d2c509a026
BLAKE2b-256 checksum
How to use checksums
3e03eb18ec965d7a9009ec47930365b1fbad49cf548327c81f16741610671a3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.12

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

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