Seite 1 von 1
Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 15:27
von aCrylic
Hi Leute, kurze Frage.
Ich habe ein Array/Liste und möchte einfach ein Key suchen und wenn er gefunden ist, dann soll "ok" per print ausgeführt werden.
Code: Alles auswählen
list = []
list = {'Name': test, 'Nachname': test}
if key in list: print("ok")
also so soll es aussehen, ganz simpel zum testen.
Jetzt mein Problem: Wenn ich eine Liste nehme, wird der string so angezeigt --> [{'Name': test, 'Nachname': test}] mit Eckigen Klammern ! Und die for-schleife funktioniert nicht, also ich kann dann den Key nicht finden! Wenn ich list = {} machen würde, dann würden keine eckigen Klammern entstehen. Wie kann ich denn trotzdem in der liste mit eckigen klammern den key finden ??? Ich will dann evtl. später suchen und löschen.
Benutze Python 3.3.5
PS: Ich habe schon fast alles versucht und mich dumm und dämlich gesucht, es funktioniert einfach nicht ! Und bitte keine "Du solltest mal in Tutoritals schauen", da gibts nichts, was mir genützt hätte, weil es einfach nicht gefunden wird mit [ ] Klammern !
Gruß
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 15:34
von EyDu
Es wurde dir ja schon mehrfach gesagt: Es heißt Liste und nicht Array und auch nicht Liste/Array. Ein Array ist etwas anderes als eine Liste! Generell solltest du aufhören von Listen mit eckigen Klammern und Listen mit geschweiften Klammern zu sprechen. Das eine sind Liste, die haben auch keinen Schlüssel (abgesehen vom Index), das andere sind Dictionaries. Das sind zwei verschiedene Datentypen.
Außerdem ist dein Beispielcode unsinnig. Was sollen Zeilen 1 und 2 bedeuten? Und dann kommt die von dir beschriebene for-Schleife überhaupt nicht im Code vor. Mir ist, aus deinem anderen Beitrag, schon klar was du machen möchtest, aber übe doch bitte deine Fragen präzise auszudrücken und schreibe nicht einfach Text hin, welcher dir gerade so einfällt.
Falls dir der "Tipp" noch nicht gegeben wurde: Arbeite das
Tutorial durch. Du stellst hier eine Frage, welche du dir mit den Grundlagen selbst locker beantworten kannst.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 15:46
von aCrylic
Also, wie oben schon im sogenannten Ausschnitt eines Codes ( als Erfahrener Programmierer, wie du es halt bist denke ich, solltest du ganz genau erkennen, was da oben steht!) will ich einen Key suchen und dann später Löschen. ABER was ich einfach nur will ist, den Key erstmal finden !
wenn ich das hier benutze (Es ist scheiss egal, ob du den Code drum rum kennst oder nicht, der tut zu dieser Zeile absolut nicht zu Sache!!!!)
myDict = {'Name': 1020, 'Kennwort': 555}
if k in myDict: print("ok") ------->> dann soll er mir einfach "ok" ausgeben! Soweit verstanden ? (Steht im jeglichen Forum diese Anweisung, solltest du kennen !!!! )
Das PROBLEM ist folgendes --> benutze ich ein dict. also myDict = { } dann findet er den Key und gibt mir "ok" aus.
Benutze ich myDict = [ ] dann findet er den Key nicht und gibt auch nichts aus ! Jetzt will ich einfach nur, in meiner Liste den Key oder String suchen ( was ja wohl möglich sein wird) ??? Weil mein weiteres Problem ist, definiere ich eine liste im constructor also meiner def __init__ methode, dann bleiben die Einträge bestehen, indem ich mit self.list darauf zugreife. Aber mit einer Dict. funktioniert das self.myDict.update als Beispiel nicht ! Die Dict wird immer überschrieben und es kommen keine weiteren einträge hinzu ! Darum will ich die liste benutzen und nach keys suchen können oder strings, wie auch immer. Das ist doch wohl wirklich nicht schwer zu verstehen oder ????
Gruß !
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 16:09
von EyDu
aCrylic hat geschrieben:Also, wie oben schon im sogenannten Ausschnitt eines Codes ( als Erfahrener Programmierer, wie du es halt bist denke ich, solltest du ganz genau erkennen, was da oben steht!) will ich einen Key suchen und dann später Löschen. ABER was ich einfach nur will ist, den Key erstmal finden !
Natürlich kann ich sehen was dort oben steht, der Code funktioniert ja auch. Aber ich kann eben nicht hellsehen wie dein anderer Code aussieht und was du damit machen willst. Du schreibst ständig, dass du eine Liste aus dem Dictionary machst. Wie machst du das, woher sollen wir das wissen? Es gibt keinen eindeutigen weg um so etwas zu tun.
aCrylic hat geschrieben:wenn ich das hier benutze (Es ist scheiss egal, ob du den Code drum rum kennst oder nicht, der tut zu dieser Zeile absolut nicht zu Sache!!!!)
Mich interessiert dein konkreter Coder überhaupt nicht, du sollst nur ein Beispiel mit deinem konkreten Problem zeigen. Was sollen wir denn mit funktionierendem Code?!
aCrylic hat geschrieben:Das PROBLEM ist folgendes --> benutze ich ein dict. also myDict = { } dann findet er den Key und gibt mir "ok" aus.
Benutze ich myDict = [ ] dann findet er den Key nicht und gibt auch nichts aus !
Bleib doch mal bei einem Namen

Oben hieß es "list", nun heißt es "myDict". Wie gesagt: Wie sieht deine Liste aus?
aCrylic hat geschrieben:Jetzt will ich einfach nur, in meiner Liste den Key oder String suchen ( was ja wohl möglich sein wird) ???
Ja, wenn man das Grundlagentutorial durchgearbeitet hat, dann kann man das
aCrylic hat geschrieben:Weil mein weiteres Problem ist, definiere ich eine liste im constructor also meiner def __init__ methode, dann bleiben die Einträge bestehen, indem ich mit self.list darauf zugreife. Aber mit einer Dict. funktioniert das self.myDict.update als Beispiel nicht ! Die Dict wird immer überschrieben und es kommen keine weiteren einträge hinzu ! Darum will ich die liste benutzen und nach keys suchen können oder strings, wie auch immer. Das ist doch wohl wirklich nicht schwer zu verstehen oder ????
So viel zum Thema, dass dein Code nicht relevant ist. Das ist so wirr, ich verstehe wirklich nichts davon. Drücke dich präzise aus, das gehört zum Programmieren dazu.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 16:16
von kbr
@aCrylic: Du scheinst in einer Denkschleife gefangen zu sein, die Dich daran hindert, die bislang gegebenen korrekten Antworten umzusetzen. In Python gibt es Datentypen. Zwei davon sind Listen und Dictionaries. Beides würfelst Du durcheinander. Am besten Du machst eine Pause und schaust Dir in der Docu dann noch einmal an, wie diese beiden unterschiedlichen Datentypen anzuwenden sind. Dann wirst Du Dich mit Deiner Aufgabenstellung schon viel leichter tun.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 16:20
von aCrylic
Okay, vereinfacht. Gibt es eine Möglichkeit, ein Dict = { } zu erstellen, was mir nicht verloren geht, nachdem die Methode zum schreiben in die Dict durchlaufen ist ???
Code: Alles auswählen
class Application_cl(object):
def __init__(self):
# constructor
self.dict = {}
self.list = []
pass
die self.list kann ich immer wieder befüllen mit Strings, da sie mir nicht verloren geht nach dem Funktionsaufruf. Aber meine Dictionary geht mir immer verloren, obwohl es im constructor ist, genau wie die liste ?!
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 16:39
von kbr
@aCrylic: Vorhandene Daten in Deinem dict gehen nur dann "verloren" , wenn Du dieses löschst bzw. Inhalte davon überschreibst. Das wirst Du dann wohl irgendwo tun.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 16:46
von aCrylic
Also, ich rufe ja die Methode mehrmals auf, weil dort strings dynamisch über ein html formular eingetragen werden, quasi 1 Eintrag = 1 Funktionsaufruf und dort wird immer mydict.update() durchgeführt, kann es sein, dass es dann überschrieben wird und somit immer nur 1 eintrag drin ist ? ich will die Dict ja füllen pro funktionsaufruf.
Gruß
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:00
von BlackJack
@aCrylic: Wenn in dem Wörterbuch mit dem das `update()` gemacht wird immer nur ein Schlüssel enthalten ist, und das immer der selbe Schlüssel ist, dann wird der Wert zu diesem Schlüssel selbstverständlich *ersetzt*. Das ist das was `update()` macht. Was sollte es denn auch sonst machen!? Wenn man `update()` grunsätzlich immer nur mit einem Schlüssel/Wert-Paar aufruft, ist das auch irgendwo ein Missbrauch der Methode, denn das ist unnötig kompliziert ausgedrückt. Der normale, offensichtlichere Weg wäre es hier dem Schlüssel einen neuen Wert zuzuweisen.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:06
von aCrylic
Der Wert (Value) ist ja immmmmer neu, da es doch dynamisch ist ! Hier der Codeausschnitt !
Code: Alles auswählen
def anmeldung(self):
output = '''<html>
<head></head>
<body>
<form method="get" action="generate">
<p>Vorname:<br><input type="text" name="test"/>
<p>Nachname:<br><input type="text" name="test"/>
<p>Anzahl Begleitpersonen:<br><input type="text" name="test"/>
<p>Studiengang:<br><input type="text" name="test"/>
<p>Betreuer:<br><input type="text" name="test"/>
<p>Kennwort:<br><input type="text" name="test"/><br>
<button type="submit">Anmelden</button>
<button type="submit">Löschen</button>
</form>
</body>
</html>
'''
return output
anmeldung.exposed = True
@cherrypy.expose
def generate(self, test):
with open("content/daten.json", "w") as f:
mystring = {"Teilnehmer": {'Name': test[0], 'Nachname': test[1], 'Anzahl Begleitpersonen': test[2], 'Studiengang': test[3], 'Betreuer': test[4], 'Kennwort': test[5]},}
self.dict.update(mystring)
json.dump(self.dict,f, indent=2, sort_keys=True)
link = '''
<meta http-equiv="refresh" content="1; URL=index.html">
'''
return link
Wie du sehen kannst, werden die "Values" zu den Keys immer dynamisch eingetragen, also es sind immer verschiedene Values. Wie kann ich denn sagen, dass er sie einfach in die Dict ergänzen soll ? Ich hänge schon seit 5 Stunden fest und habe alles erdenkliche versucht !
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:11
von aCrylic
Ich verstehe was du meinst, der Schlüssel spielt ja die Rolle, was muss ich ändern in meinem String oder funktion, das es ergänzt wird ??? Ich will ja die schlüssel behalten, nur die Values sollen geändert werden, und es sollen mehrere gleiche schlüssel erlaubt sein !
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:14
von Sirius3
@aCrylic: ein Dictionary kann jeden Key nur einmal enthalten. Das ist ja gerade der Sinn eines Dictionarys.
Warum heißen alle Deine Input-Felder `test`?
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:17
von aCrylic
weil "test" die dynamischen HTML Attribute sind, das heißt, füllt ein User seinen Vornamen auf der Webseite aus in dem Formular, wird es in test[0] usw gespeichert.
Was ist denn jetzt die beste Möglichkeit, die Keys und die Values zu suchen in meiner Liste, ich hab ja das problem mit den Eckigen klammern -.- Was sollte ich verwenden ?
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:20
von aCrylic
Am einfachsen wäre es, wenn ich eine laufvariable einbauen würde in den String uns dann ist es immer nach update, key1, key2, key3, key4 usw. Was müsste ich da im String ändern ? So hätte ich dann immer einen anderen key.
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:26
von aCrylic
Ich habs glaube ich !!!! Moment
Re: Listenstring Eckige Klammern, Globales Dictionary
Verfasst: Sonntag 12. Oktober 2014, 17:32
von BlackJack
@aCrylic: Wenn Du durchnummerierte Schlüssel hast die dynamisch erzeugt werden dann willst Du kein Wörterbuch sondern eine Liste. Da hast Du ja Nummern als Schlüssel.
Die Frage nach `test` hast Du nur so halb beantworted. Warum hat dort nicht jedes Feld seinen eigenen Namen und vor allem warum so was unpassendes wie `test`? Namen sollten dem Leser vermitteln was etwas bedeutet. Und wenn Du da verschiedene Eingabfelder hast mit verschiedenen Bedeutungen, dann schmeiss das doch bitte nicht alles unter dem selben Namen zusammen in eine Sequenz.
`self.dict` ist ein ähnlich schlechter Name weil absolut nichtssagend. Den Leser interessiert nicht was für ein Typ hinter einem Namen steht, sondern was der Wert im Kontext des Programms *bedeutet*.
Noch schlimmer ist `mystring`. Nicht wegen dem absolut überflüssigen `my`-Präfix, sondern weil daran dann nicht einmal eine Zeichenkette sondern ein Wörterbuch als Wert gebunden wird. Also ein semantisch gesehen völlig falscher Name.