viz dole

> Ondrej Beran
> 2007/10/10, rajcze <[EMAIL PROTECTED]>:
> > Myslim ze Ondrej hleda spis neco takovehoto
> >
> > slovnik = {1:'z', 2:'a', 3:'c'}
> > index_slovniku = slovnik.items()
> > index_slovniku.sort(lambda x,y: cmp(x[1],y[1]))
> > index_slovniku = map(lambda x: x[0], index_slovniku)
> 
> JJ, to je presne to, co jsem nedokazal vymyslet.
> Porad jsem nevedel jak docilit, aby se mi se tridenou hodnotou
> movenul/swapnul i klic
> 
> > urcite se to da napsat hezceji :)
> 
> Hlavne, kdyz to dela to, co potrebuju  -  analyzuju logy tj. seskupuji
> zavisle events a divam se na ne z ruznych pohledu.

Principiálně to moc jinak napsat nejde. Slovník se dle uživatelských 
potřeb vnitřně jinak uspořádávat nedá. Musí se to udělat zvenku, 
čili vytvořit pomocný seznam klíčů v pořadí, které odpovídá 
seřazeným hodnotám.

Abychom takový seznam hodnot získali, musíme nejdřív získat seznam
položek, kde každá položka obsahuje jak klíč, tak hodnotu. Tenhle
seznam se musí seřadit podle hodnotové části položek. Ze seznamu 
položek se pak můžou vybrat jen klíče ve stejném pořadí.

Pokud někdo nevyznává lambda, map a spol, může považovat následující
zápis za přehlednější:
=======================================
slovnik = {1:'z', 2:'a', 3:'c'}

def cmpPodleHodnot(a, b):
    return cmp(a[1], b[1])

polozky_slovniku = slovnik.items()
polozky_slovniku.sort(cmpPodleHodnot)
index_slovniku = [ klic for klic, hodnota in polozky_slovniku ]
=======================================

Pokud potřebujeme extrémně šetřit místem, pak bychom
měli hned zrušit seznam polozky_slovniku, což se v původním
řešení děje uvolněním reference při znovupoužití stejnojmenné
proměnné.

Pokud ale místem tak moc šetřit nepotřebujeme, pak klidně
můžeme zůstat u seznamu polozky_slovniku a seznam klíčů
vůbec nebudovat. Paměťově to bude jen velmi mírně náročnější.

pepr
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem