Seite 1 von 1

Dictionaries

Verfasst: Mittwoch 4. Dezember 2019, 21:45
von mto99
hallo

wie kann ich bei dictionaries mit dem wert auf den schlüssel zugreifen?

Re: Dictionaries

Verfasst: Mittwoch 4. Dezember 2019, 21:48
von nezzcarth
Das hängt vom Anwendungszweck ab. So ohne Weiteres geht es nicht. Eine Variante ist, dass man ein zweites, invertiertes Dictionary erzeugt; damit das funktioniert, müssen die Werte aber als Schlüssel geeignet sein oder entsprechend umgewandelt werden. Das geht zum Beispiel leicht mit einer Dictionary-Comprehension.

Code: Alles auswählen

In [1]: d = {'a': 1, 'b': 2}                                                                                                                                  

In [2]: d                                                                                                                                                     
Out[2]: {'a': 1, 'b': 2}

In [3]: e = {value: key for key, value in d.items()}                                                                                                          

In [4]: e                                                                                                                                                     
Out[4]: {1: 'a', 2: 'b'}


Re: Dictionaries

Verfasst: Mittwoch 4. Dezember 2019, 22:01
von mto99
ok danke.
das hilft mir weiter

Re: Dictionaries

Verfasst: Donnerstag 5. Dezember 2019, 02:23
von pillmuncher
mto99: Was nezzcarth gesagt hat.

Es kann allerdings zu Problemen kommen, sofern gleiche Werte verschiedenen Schlüsseln zugeordnet sind:

Code: Alles auswählen

>>> d = {'a': 1, 'b': 2, 'c': 1}
>>> e = {value: key for key, value in d.items()}
>>> e
{1: 'c', 2: 'b'}  # wo ist a?
Statt dessen kann man sowas machen:

Code: Alles auswählen

>>> from collections import defaultdict
>>> e = defaultdict(list)
>>> for k, v in d.items():
...     e[v].append(k)
... 
>>> e
defaultdict(<class 'list'>, {1: ['a', 'c'], 2: ['b']})
>>> dict(e)
{1: ['a', 'c'], 2: ['b']}

Re: Dictionaries

Verfasst: Donnerstag 5. Dezember 2019, 09:56
von __blackjack__
Es gibt auch schon fertige Klassen für Abbildungen in beide Richtungen: https://bidict.readthedocs.io/en/master/index.html