Dictionaries

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
mto99
User
Beiträge: 15
Registriert: Mittwoch 30. Oktober 2019, 17:35

Mittwoch 4. Dezember 2019, 21:45

hallo

wie kann ich bei dictionaries mit dem wert auf den schlüssel zugreifen?
nezzcarth
User
Beiträge: 885
Registriert: Samstag 16. April 2011, 12:47

Mittwoch 4. Dezember 2019, 21:48

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'}

mto99
User
Beiträge: 15
Registriert: Mittwoch 30. Oktober 2019, 17:35

Mittwoch 4. Dezember 2019, 22:01

ok danke.
das hilft mir weiter
Benutzeravatar
pillmuncher
User
Beiträge: 1164
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Donnerstag 5. Dezember 2019, 02:23

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']}
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 5176
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 5. Dezember 2019, 09:56

Es gibt auch schon fertige Klassen für Abbildungen in beide Richtungen: https://bidict.readthedocs.io/en/master/index.html
long long ago; /* in a galaxy far far away */
Antworten