# bijection¶

Bijections are functions that map keys to unique values, ie. one-to-one, onto functions. See: https://en.wikipedia.org/wiki/Bijection

bijection maintains the inverse mapping on bijection.inverse which is itself an instance of bijection.

## Examples¶

```>>> from collections_extended import bijection
>>> bij = bijection({'a': 1, 'b': 2, 'c': 3})
>>> bij.inverse
'b'
>>> bij['a'] = 2
>>> bij == bijection({'a': 2, 'c': 3})
True
>>> bij.inverse = 'a'
>>> bij == bijection({'a': 1, 'c': 3})
True
>>> bij.inverse.inverse is bij
True
```

## API¶

class `collections_extended.``bijection`(iterable=None, **kwarg)[source]

A one-to-one onto mapping, a dict with unique values.

`__init__`(iterable=None, **kwarg)[source]

Create a bijection from an iterable.

Matches dict.__init__.

`clear`()[source]

Remove everything from this bijection.

`copy`()[source]

Return a copy of this bijection.

`get`(k[, d]) → D[k] if k in D, else d. d defaults to None.
`inverse`

Return the inverse of this bijection.

`items`()[source]

See Mapping.items.

`keys`()[source]

See Mapping.keys.

`pop`(k[, d]) → v, remove specified key and return the corresponding value.

If key is not found, d is returned if given, otherwise KeyError is raised.

`popitem`() → (k, v), remove and return some (key, value) pair

as a 2-tuple; but raise KeyError if D is empty.

`setdefault`(k[, d]) → D.get(k,d), also set D[k]=d if k not in D
`update`([E, ]**F) → None. Update D from mapping/iterable E and F.

If E present and has a .keys() method, does: for k in E: D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v

`values`()[source]

See Mapping.values.