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_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()) == ['x', 'y']
  • 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

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.1.tar.gz (4.6 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.1-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for aldict-1.1.1.tar.gz
Algorithm Hash digest
SHA256 f59962ce416cfba066d646989fca0bc97bb02f148832e1ec7c6d969a60280546
MD5 f7aefcf7060b2305719057b94f18354f
BLAKE2b-256 3dc753b584d7b8138d536acccc22f45de2a7866d3610c080b3e61c6b1f03fc0c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aldict-1.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ac9cab4804c64913e4f975cd81673ce253cde6b7956685caf3d721e8a6954793
MD5 d77d9ab612aa2845d1d14f4fbba91427
BLAKE2b-256 755266360062241e07ca0a2e08ef9540742779055a042e6c8de8befc7d1f3b67

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