Suche im Dictionary klappt nicht

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
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Servus,

ich habe ein Dictionary angelegt, und will weiter unten im Programm mal nachfragen ob mein String denn mit einem Schlüssel des Dictionaries übereinstimmt ... ich denke, das sollte sein, Python sagt aber, dem ist nicht so. Ich bin Python-Anfänger und vielleicht muss ich noch was zum String-Vergleich wissen.

Hier mein Code:

Code: Alles auswählen

for curosdirlistitem in dirlist :
	print( "DateiElement: ", curosdirlistitem ) 
	if "uwertcutofftxt" in curosdirlistitem :
		# Cutoff-Datei-Name: Msa-Namen holen
		print( "... Cutoff-Datei-Name erkannt" )
		curMsaName = curosdirlistitem[0:6]
		print( "Vergleich MSA-Name: ", curMsaName )
# XXXXXXXXX HIER SCHAUEN XXXXXXXXXXXXXXXXXXXXX
		if str( curMsaName ) in listOfRelationsDics :
			print( "DicEle ist da ... ", curMsaName, ":", listOfRelationsDics[curMsaName] )
			curMsaIndex = listOfRelationsDics[curMsaName]
		else:
			print( "Fehler, DicEle ist nicht da! hier : " , curMsaName )
			curMsaIndex = "FEHLER"
		listOfMsaIndizes.append( curMsaIndex )
		listOfMsaNames.append( curMsaName )
	#else:
		#print( "Unwichtige Datei" )
Konsolenoutput:
...
DicEle: {'2IAD_B': '497'}
DicEle: {'1U3I_A': '498'}
DicEle: {'3C60_A': '499'}
...
DateiElement: 2VQE_O.fas.uwertcutofftxt
... Cutoff-Datei-Name erkannt
Vergleich MSA-Name: 2VQE_O
Fehler, DicEle ist nicht da! hier : 2VQE_O
...
DateiElement: 1NC8_A.fas.uwertcutofftxt
... Cutoff-Datei-Name erkannt
Vergleich MSA-Name: 1NC8_A
Fehler, DicEle ist nicht da! hier : 1NC8_A
DateiElement: 3D0F_A.fas-curvefitcolanalyse.csv
Zuletzt geändert von Jochen1980 am Mittwoch 17. August 2011, 13:22, insgesamt 1-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Jochen1980 hat geschrieben:ich habe ein Dictionary angelegt, und will weiter unten im Programm mal nachfragen ob mein String denn mit einem Schlüssel des Dictionaries übereinstimmt ... ich denke, das sollte sein, Python sagt aber, dem ist nicht so.
Du verwendest meiner Meinung nach keinen besonders gelungenen Bezeichnernamen, so dass das Lesen des Codes ein wenig schwer fällt. Um eine gemeinsame Basis für den Code zu haben hat der Herr uns PEP-8 gegeben.

Dein Problem könnte sein, dass du testest, ob der Key in listOfRelationsDics vorhanden ist. Dessen Inhalt wird allerdings nicht durch den hier gezeigten Programmteil erzeugt und enthält möglicherweise andere Dinge als du glaubst.
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Genau, ich kam auch grad drauf ... ich schaue in einer Liste von Dictionaries nach dem Schlüssel, muss aber die Liste natürlich ablaufen. Danke für den Style-Guide-Hinweis.
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Ah, eigentlich reicht mir ein Dictionary ... muss ich noch etwas umbauen den Code.
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Langsam wird es aber warum erhalte ich da den gesamten Dictionary-Element Eintrag ich hatte mit dem Index gerechnet also 19 - wie mache ich das bei dieser Zuweisung curMsaIndex?

Code: Alles auswählen

print( "Vergleich MSA-Name mit allen Schluesseln der DictionaryListe: ", curMsaName )
		if curMsaName in dictOfMsaNameAndIndexRelation :	
			print( "DicEle ist da ... ", curMsaName, ":", dictOfMsaNameAndIndexRelation[curMsaName] )
			curMsaIndex = dictOfMsaNameAndIndexRelation[curMsaName]
			print( "CurrentMsaIndex :", dictOfMsaNameAndIndexRelation[curMsaName] )
		else:
Konsole:
... Cutoff-Datei-Name erkannt
Vergleich MSA-Name mit allen Schluesseln der DictionaryListe: 2VQE_O
DicEle ist da ... 2VQE_O : {'2VQE_O': '19'}
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

Ich flieg gleich in die Lust :-)

Das einfach Beispiel geht schon so wie erwartet, aber warum ich oben nicht nur den Wert erhalte ist mir ein Rätsel:

Code: Alles auswählen

#!/usr/bin/python3

print( "Hallo Welt" )
alter = { "Peter":31, "Julia":28, "Werner":351 }
print( alter )

ele = alter["Peter"]
print( ele )

dynDicKey1 = "Peter"
dynDicKey2 = "Fritz"
dynDicVal1 = 23
dynDicVal2 = 34
dynDic = {}
dynDic[ dynDicKey1 ] = dynDicVal1
dynDic[ dynDicKey2 ] = dynDicVal2
print( dynDic )
print( dynDic[dynDicKey1] )

dynValVar = dynDic[ dynDicKey1 ]
print( dynValVar ) # gibt wie erwartet 23
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

/me hat recht... du hast eine ganz komische Art Variablennamen zu vergeben. Das macht nicht wirklich Spaß den Code zu lesen.

Wenn du einen Wert aus einem dictionary abrufst und es kommt ein dictionary... dann liegt das in der Regel daran, dass der Wert ein Dictionary ist...
Jochen1980
User
Beiträge: 40
Registriert: Montag 15. August 2011, 18:44

... bin ich ein Esel .... noch Kollateralschäden von meiner Mehr-Dictionary-Variante! Danke.
Antworten