Skip to main content

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

Project description

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 key to list of aliases)
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)])
  • remove key and aliases
ad.pop("y")
assert list(ad.items()) == [('x', 10), ('Xx', 10)]
  • origin_keys
    (get original keys only)
assert list(ad.origin_keys()) == ['x', 'y']
  • 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
  • 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
  • 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

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

aldict-1.1.0.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

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

aldict-1.1.0-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file aldict-1.1.0.tar.gz.

File metadata

  • Download URL: aldict-1.1.0.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.12

File hashes

Hashes for aldict-1.1.0.tar.gz
Algorithm Hash digest
SHA256 892cd1b34e9247a1134157bc84cb07c7aee133dbbd5f274b3398d3168185eed2
MD5 18d89ab2e78791c10c977f72e4ddb29b
BLAKE2b-256 fb98412122042fe2c2c8dadd62addc963dca3b605d41c3d2b88e6c4aa5b7befd

See more details on using hashes here.

File details

Details for the file aldict-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: aldict-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.12

File hashes

Hashes for aldict-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 160b9d6251c3830ebb3359a0cb9dac78b47e8c537685522b338f517246c09ec8
MD5 aec15216b606bc4df584c985a224bdb6
BLAKE2b-256 7a53473cb7645011916d1096a115c1f7435e312497b3d253047e47ccc5bfe202

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