Dictionary aus List machen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CTexx
User
Beiträge: 2
Registriert: Sonntag 2. Oktober 2022, 23:47

Hallo,

ich bin ein ziemlicher Neuling was programmieren angeht und bin grad dabei ein paar einfache Sachen zu lösen.

Nun möchte ich eine vorhandene Liste in ein Dictionary umwandeln, bei der der key die Zahl aus der Liste ist, und die Value +1 größer.
Nach langem versuchen und googeln bin ich irgendwie auf diese Lösung gekommen, jedoch frage ich mich ob es da keine einfachere Lösung gibt?

Code: Alles auswählen

numbers = [1,2,3,4]

new_dict = {numbers[i]: numbers[i] + 1 for i in range(0, len(numbers))}
print(new_dict)
Danke im Vorraus!
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man in Python über einen Index iteriert, macht man was falsch, weil man direkt über die Elemente iterieren sollte:

Code: Alles auswählen

numbers = [1,2,3,4]
new_dict = {number: number + 1 for number in numbers}
print(new_dict)
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten