Seite 1 von 1

Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 13:04
von Jochen1980
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

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 13:19
von /me
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.

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 13:23
von Jochen1980
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.

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 13:29
von Jochen1980
Ah, eigentlich reicht mir ein Dictionary ... muss ich noch etwas umbauen den Code.

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 13:51
von Jochen1980
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'}

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 14:14
von Jochen1980
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

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 14:31
von sparrow
/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...

Re: Suche im Dictionary klappt nicht

Verfasst: Mittwoch 17. August 2011, 14:36
von Jochen1980
... bin ich ein Esel .... noch Kollateralschäden von meiner Mehr-Dictionary-Variante! Danke.