Letzter Eintrag in Dict in Dict

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
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Hey Leute,
ich habe Probleme den letzten Eintrag eines Dict`s in einem Dict zu bekommen.

Code: Alles auswählen

dictionary = {0: {1: 'hallo'}, 1: {5: 'moin', 10: 'hallo'}, 2: {15: 'moin'}}
print(list(dictionary.keys())[-1])
Ich brauche: 2, 15, 'moin'
Kann mir da bitte jemand helfen?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

was bekommst Du statt dessen?
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

ich bekomms nur so hin:

Code: Alles auswählen

key = list(dictionary.items())[-1]
values = list(dictionary.items())[-1][-1]
print(key)
print(values)
ausgabe:
(2, {15: 'moin'})
{15: 'moin'}
wobei python 3 bei der letzten gaussklammer in values meckert, es aber trotzdem so ausführt.
ich hätte gern so was wie x=2, y=15, text='moin'
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Die Frage von Sirius3 bezog sich auf den Code deines ersten Posts. Was bekommst du da statt dem, was du möchtest? Nicht den Wert. Was _ist_ das?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

key ist jetzt der falsche Name für ein Item.
Und wo ist jetzt das Problem, diese primitive Datenstrukturen in passende Variablen zu schreiben?
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Ach so, also:

Code: Alles auswählen

dictionary = {0: {1: 'hallo'}, 1: {5: 'moin', 10: 'hallo'}, 2: {15: 'moin', 16: 'tag'}}
print(list(dictionary.items())[-1])
gibt mir (2, {15: 'moin', 16: 'tag'})
ich hätte hier gern:
key = 2, key_value=16, text='tag'
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Kann mir da keiner helfen? Ich bekomme es leider nicht hin :(
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
key = 2, key_value=16, text='tag'
Der Schlüssel "2" des Dicts `dictionary` ist wiederum ein Dict und das hat wiederum zwei Werte.

Von daher ist "key=2, key_value=16" sowie so formell falsch.

Wenn du aus dem Dict zum Schüssel "2" wiederum den letzten Wert holen willst, musst du eine verschachtelte Abfrage schreiben. Also das, was du für "2" machst nochmals für das Dict, was "2" zugeordnet ist.

Gruß, nosiefloor
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Danke. Und genau das bekomme ich doch eben nicht hin :)
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wie gesagt: alles 2x machen:

Code: Alles auswählen

>>> d = {0: {1: 'hallo'}, 1: {5: 'moin', 10: 'hallo'}, 2: {15: 'moin', 16: 'tag'
}}
>>> last_outer_key, last_outer_value = list(d.items())[-1]
>>> last_inner_key, last_inner_value, = list(last_outer_value.items())[-1]
>>> print(f'{last_outer_key} - {last_inner_key} - {last_inner_value}')
2 - 16 - tag
>>>
Gruß, noisefloor
DMD-OL
User
Beiträge: 327
Registriert: Samstag 26. Dezember 2015, 16:21

Vielen Dank für deine Hilfe.
Ich komm mit der Dict-Änderung noch nich so klar. Hab (wie vorher immer) versucht, einen Einzeiler hinzubekommen.
Warum wurde der Umgang mit Dict's eigentlich geändert?
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DMD-OL: Welche Änderung meinst Du? Wie hättest Du das denn vor der ominösen Veränderung im Umgang mit Dicts gemacht?

Falls Du die Ordnung meinst, also das man sich ab Python 3.7 offiziell darauf verlassen kann, das die Elemente von Wörterbüchern eine deterministische Reihenfolge haben: Das macht doch den einfachen Code jetzt erst möglich. Vorher hätte man explizit `collections.OrderedDict` verwenden müssen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten