Skip to content

Instantly share code, notes, and snippets.

@treygriffith
Created October 18, 2014 18:44
Show Gist options
  • Select an option

  • Save treygriffith/6bd361731790776678c2 to your computer and use it in GitHub Desktop.

Select an option

Save treygriffith/6bd361731790776678c2 to your computer and use it in GitHub Desktop.

Revisions

  1. treygriffith created this gist Oct 18, 2014.
    49 changes: 49 additions & 0 deletions immutable_dict.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,49 @@
    class ImmutableDict:
    """A tuple with non-index keys"""

    def __init__(self, dict):
    self._keys = tuple(dict.keys())
    self._values = tuple(dict.values())

    def __len__(self):
    return len(self._keys)

    def __getitem__(self, key):
    return self._values[self._keys.index(key)]

    def __iter__(self):
    for key in self._keys:
    yield key

    def __contains__(self, value):
    return value in self._values

    def keys(self):
    return list(self._keys)

    def values(self):
    return list(self._values)

    def items(self):
    return zip(self._keys, self._values)

    def has_key(self, key):
    return key in self._keys

    def get(self, key, default=None):
    if key in self._keys:
    return self[key]
    else:
    return default

    def iterkeys(self):
    for key in self:
    yield key

    def itervalues(self):
    for value in self._values:
    yield value

    def iteritems(self):
    for key in self:
    yield (key, self[key])