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.
firstval = thisdict["secondval"][0] #get first element
auf den Eintrag "secondval" des dictionaries zugegriffen. Ist es möglich statt dem Namen auch auf den ersten Eintrag zuzugreifen, sodass der Name unbekannt bleiben kann?
Ich stelle mir sinngemäß so etwas vor:
Ich halte das aber für fragwürdig. Warum willst du das? Erst seit neueren Python Versionen ist die einfüge-Reihenfolge dafür verbindlich. Und bist du sicher, das ist die richtige Reihenfolge?
Ja, es geht darum, Messdaten die immer im ersten Eintrg stehen zu extrahieren, um dann damit weiter zu arbeiten.
Leider funktioniert das bei mir nicht, obwohl ich Python aktuell habe.
#first I create an empty dicitonary
thisdict = {}
#later I add in some values
thisdict["firstval"] = "1stval"
thisdict["secondval"] = ["2ndval", "3rdval"] #some values in the list
firstval = thisdict.values()[1] #get first element
Ich schrieb 0 nicht ohne Grund. Das ist der erste wert. Warum sind die messdaten nicht in einer Liste? Wenn du nach Reihenfolge zugreifen willst, ist das die bessere Datenstruktur.
Um meinen Vorschlag zu reparieren sollte eines von beiden gehen:
Huh. Ich muss wohl noch Vertrauter werden mit Python 3 dicts. Wahrscheinlich fehlt da wiederum ein iter. Aber warum das so schwierig ist muss ich mal nachlesen.
Die Frage warum das ein Wörterbuch ist, wenn du doch per Stelle zugreifen willst, bleibt bestehen. Das riecht Fischig.
Jetzt kommt mir in den Sinn was gemeint ist. Es ist ein Wörterbuch, weil ich es mit loadmat einlese, welches nunmal Wörterbücher erzeugt. Das habe ich von hier: https://towardsdatascience.com/how-to-l ... 200e1287b5, Kapitel Loading .mat files
Suchst du nicht eher dein_dict["annotations"][0] oder handelt es sich bei dir um eine andere Art von Datei als die aus dem Link?
Ansonsten bitte noch etwas mehr Infos zum Zusammenhang geben. Dein Ansatz klingt komisch und womöglich kann man das sauberer lösen. Was sagt list(dein_dict.items()) denn?
Es handelt sich um eine andere Art von Datei. Also die eigentliche Idee war ja, statt mit dem Namen auf einen Eintrag im Wörterbuch zuzugreifen, einfach den ersten Eintrag (beispielhaft) auszuwählen. Mit
wird mein wörterbuch in eine Liste umgewandelt, allerings komplett und nicht nur ein selektierter Eintrag. Mein kompletter Code dazu steht ja als Beispiel oben schon.
Zeig doch mal, wie das dict aussieht und welchen Wert du davon brauchst.
Mit einem Index auf den Wert eines dicts zuzugreifen ist ungewöhnlich, in den meisten Fällen falsch.
Zuletzt geändert von sparrow am Mittwoch 15. Januar 2020, 09:34, insgesamt 1-mal geändert.
Nein, es ist keine gute Idee, statt mit dem Namen irgendwelche zufälligen Werte zu nehmen. Bei einem Wörterbuch (vor allem, wenn es aus anderen Quellen kommt) gibt es keine Reihenfolge.
Was ist der Grund, warum Du nicht Namen verwenden willst?
@ sparrow
Das dict ist das, was ich oben erstellt habe. Darin möchte ich auf den zweiten Eintrag zugreifen: "secondval". Statt diesen mit seinem Namen aufzurufen, möchte ich ihn mit seinem Index aufrufen, da ich ja weiß, dass er sich an zweiter Stelle befindet.
@ Sirius3
Den Namen möchte ich nicht verwenden, da sich dieser unterscheidet je nach Wörterbuch. Der eintrag jedoch bleibt an Stelle 2.
@ snafu
Hier stehe ich etwas auf dem Schlauch. Was ist mit Rückgabe gemeint? Es läuft bei mir fehlerfrei ohne Probleme durch und erstellt eben eine Liste aus dem Wörterbuch.
@ytm81524: Woher weisst Du denn das sich der Eintrag an ”zweiter Stelle” befindet? Wie wird das garantiert oder wer garantiert das? Garantiert Matlab das Variablen in einer *.mat-Datei neben einem Namen auch eine feste Reihenfolge haben? Kann man das irgendwo nachlesen? Selbst wenn es eine Reihenfolge gibt, wie kannst Du sicher sein, dass die auch überall gleich ist? Wenn man das beim schreiben/erstellen der Dateien sicherstellt, könnte man dort auch einen festen Namen sicherstellen.
Und selbst wenn die Reihenfolge in der Datei existieren sollte, ist das bei einem Wörterbuch erst ab Python 3.6 sichergestellt. Das sollte man eventuell prüfen um Überraschungen zu vermeiden, oder explizit selbst ein `collections.OrderedDict` zum füllen übergeben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
In meinem konkreten Fall ist das garantiert, ob das allgemeingültig ist? Ich denke tatsächlich auch eher nicht. Es sind nur 10 .mat Files. Es ist schon richtig, dass ich gerade bei nur 10 Files auch jedes mit seinem Namen ansprechend könnte. Bei 10 ist das noch einigermaßen übersichtlich.
Ja man hätte das bei der Erstellung der Datei beachten können, allerdings war dort die Idee, über den Variablennamen noch zusätzliche Informationen zu übermitteln, weshalb diese alle verschieden sind.
Zumindest ich verwende Python 3.7.