Seite 1 von 1

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

Verfasst: Sonntag 21. Juni 2009, 21:55
von Thuught
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.

Verfasst: Sonntag 21. Juni 2009, 22:08
von 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}