Weil ich gerade noch den Inhalt vom `glom`-Modul in meiner IPython-Sitzung habe:
Code: Alles auswählen
In [890]: glom(numbers, (Iter({T: T + 1}), merge))
Out[890]: {1: 2, 2: 3, 3: 4, 4: 5}
Und wenn man Speicherplatz gegen Rechenzeit eintauschen möchte, kann man sich sparen die Werte zu den Schlüsseln zu speichern und die beim Zugriff berechnen:
Code: Alles auswählen
from collections.abc import Mapping
class PlusOneMapping(Mapping):
def __init__(self, keys):
self._keys = set(keys)
def __len__(self):
return len(self._keys)
def __getitem__(self, key):
if key not in self._keys:
raise KeyError(key)
return key + 1
def __iter__(self):
return iter(self._keys)
def main():
numbers = [1, 2, 3, 4, 2]
mapping = PlusOneMapping(numbers)
print(len(mapping))
print(mapping[1])
print(list(mapping.items()))
print(dict(mapping))
print(mapping.get(42, "Ooops"))
print(mapping[42])
if __name__ == "__main__":
main()
Ausgabe:
Code: Alles auswählen
4
2
[(1, 2), (2, 3), (3, 4), (4, 5)]
{1: 2, 2: 3, 3: 4, 4: 5}
Ooops
Traceback (most recent call last):
File "forum12.py", line 33, in <module>
main()
File "forum12.py", line 29, in main
print(mapping[42])
File "forum12.py", line 13, in __getitem__
raise KeyError(key)
KeyError: 42