Seite 1 von 1

Fehler: KeyError

Verfasst: Donnerstag 9. Juli 2009, 21:53
von Krümelmonster
Hallo,

ich habe aus einem Buch zu Empfehlungssystemen dieses Programm abgeschrieben, woraufhin ein Fehler aufgetaucht ist :oops: (KeyError: 'The Night Listener'), es muss an der Funktion topMatches liegen, den anderen Teil habe ich getestet.
Ich habe leider erst angefangen Python zu lernen und muss parallel das Thema durcharbeiten, deswegen wäre ich für Hilfe dankbar.

Code: Alles auswählen

critics={.....}
def sim_distance(prefs, person1, person2): #Funktion der das Dictionary mit den zwei Keys übergeben wird
	#Liste der gemeinsamen Elemente bestimmen
	si={}
	for item in prefs[person1]:
		if item in prefs[person2]: si[item]=1
			
	#Wenn keine gemeinsame Bewertung existiert, null zurückgeben
	if len(si)==0: return 0 
	#Quadrate aller Abstände addieren --> (Pythagoras)
	sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2)
					for item1 in prefs[person1] if item1 in prefs[person2]])#aber nur wenn beide das O. kennen

	return 1/(1+sqrt(sum_of_squares))		

def topMatches(prefs, person, n=5, similarity=sim_distance):
	scores=[(similarity(prefs,person,other),other)
				for other in prefs 
					if other <> person]
	
	#Sortieren der Liste
	scores.sort()
	scorse.reverse()
	return scores[0:n]
[/code]

Verfasst: Donnerstag 9. Juli 2009, 22:35
von ms4py
Vielleicht sagst du mal die Zeile, in der der Fehler auftritt.
Und dann gibts am besten auch den gesamten Code, aus diesem Schnippsel wird man eh nicht wirklich schlau! (am besten unter http://paste.pocoo.org/ , wenn er ziemlich groß ist)

Verfasst: Samstag 11. Juli 2009, 10:31
von Krümelmonster
Hallo,

Tut mir Leid, es scheint jetzt plötzlich zu funktionieren. Vielleicht hätte ich einfach Python Shell neustarten sollen (?). Trotzdem wäre es toll, wenn mir jemand erklären könnte, was in der Zuweisung zu "scores" passiert.
Danke für deine Antwort, ice 2k3 (das war übrigens der gesamte Code, abgesehen vom Inhalt des Dictionarys)

Gruß
Krümelmonster

Verfasst: Samstag 11. Juli 2009, 11:32
von Darii
Wieso fängst du nicht von vorne an? Da werden irgendwann die list comprehensions erklärt. Es bringt nichts, wenn du einfach irgendwas abschreibst...


Weitere Hilfen für Anfänger findes du auf: [wiki]Tutorial[/wiki]

btw. <> ist veraltet und fliegt in Python 3 raus.