Hallo MikeDee,
um nochmals die Fehlermeldung »SyntaxError: keyword can't be an expression« auseinander zu nehmen:
Es gibt einen »SyntaxError«, weil Du irgendein Konstrukt benutzt hast, das nicht in der Sprachdefinition erlaubt ist.
Ein »keyword« gibt es bei Funktionsaufrufen. Parameter können entweder durch ihre Position oder eben als Keyword übergeben werden. Zum Beispiel:
Hier ist »sep« ein Keywordargument, und zwar eines, das »print« auch kennt.
»expression« ist nun alles was einen Wert hat oder haben kann, also »7« oder »a*6« oder »dic[filename]«, auf Deutsch „Ausdruck“.
Wenn Du das alles Zusammensetzt kommt heraus, dass die Fehlermeldung besagt, dass ein Ausdruck nicht als Schlüsselwort verwendet werden kann, sondern Keywords immer einfache Namen sein müssen.
Übrigens ist »dic[filename]="tagme"« kein Ausdruck, weil es auch keinen Wert hat, sondern eine Zuweisung. Es gibt Sprachen, da ist das anders (C, JavaScript, Perl, …), und man freut sich über solche schönen Meinungsverschiedenheiten zwischen dir und dem Compiler, was »if(a=5) …« bedeuten soll.
Grüße
Sirius
PS: falls ich mal ein Pythonbuch schreiben werde, will ich gleich zu Anfang ein großes Kapitel zu Fehlermeldungen verstehen schreiben.