die x größten values aus einem Wörterbuch filtern

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
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

Hallo zusammen,
ich wollte mal fragen, wie man aus einem (relativ großen) Wörterbuch
am effektivsten die besten Treffer herrausholt. Meine Implementierung derzeit ist ziemlich basic und an der Ausgabe müsste man eigentlich auch nochmal rumsortieren:

Code: Alles auswählen

import random
def top5(p):
	def _einordnen(x,dic):
		for key in dic.iterkeys():
			if dic[key]<x.values()[0]:
				val={key:dic.pop(key)}
				dic.update(x)
				dic=_einordnen(val,dic)
				break
		return dic
	nearest=dict.fromkeys(range(5),0.0)
	for i in p.iterkeys():
		k={i:p[i]}
		nearest=_einordnen(k,nearest)
	return nearest

p=dict((i,random.randint(1,300)) for i in range(15))
print p
print top5(p)

{0: 143, 1: 138, 2: 236, 3: 254, 4: 263, 5: 156, 6: 225, 7: 217, 8: 121, 9: 200, 10: 41, 11: 190, 12: 267, 13: 239, 14: 35}

{3: 254, 4: 263, 12: 267, 13: 239}

Die Werte im eigentlichen Code werden nicht wie hier direkt verglichen sondern mit Rückgabewerten einer Funktion.
BlackJack

Warum `top5()` nur vier Werte liefert, muss man jetzt nicht verstehen, oder? ;-)

Code: Alles auswählen

In [70]: p
Out[70]:
{0: 143,
 1: 138,
 2: 236,
 3: 254,
 4: 263,
 5: 156,
 6: 225,
 7: 217,
 8: 121,
 9: 200,
 10: 41,
 11: 190,
 12: 267,
 13: 239,
 14: 35}

In [71]: dict((a, b) for b, a in sorted((v, k) for k, v in p.iteritems())[-4:])
Out[71]: {3: 254, 4: 263, 12: 267, 13: 239}
Antworten