Seite 1 von 1
Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:13
von DMD-OL
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?
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:16
von Sirius3
was bekommst Du statt dessen?
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:42
von DMD-OL
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'
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:45
von sparrow
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?
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:47
von Sirius3
key ist jetzt der falsche Name für ein Item.
Und wo ist jetzt das Problem, diese primitive Datenstrukturen in passende Variablen zu schreiben?
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 14:58
von DMD-OL
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'
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 15:23
von DMD-OL
Kann mir da keiner helfen? Ich bekomme es leider nicht hin

Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 15:28
von noisefloor
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
Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 20:50
von DMD-OL
Danke. Und genau das bekomme ich doch eben nicht hin

Re: Letzter Eintrag in Dict in Dict
Verfasst: Freitag 11. Dezember 2020, 21:10
von noisefloor
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
Re: Letzter Eintrag in Dict in Dict
Verfasst: Samstag 12. Dezember 2020, 01:44
von DMD-OL
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?
Re: Letzter Eintrag in Dict in Dict
Verfasst: Samstag 12. Dezember 2020, 07:57
von __blackjack__
@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.