[python] NEWBIE: pouziti map() ve slovnicich (dict())
Petr Prikryl
Prikryl na skil.cz
Pondělí Leden 10 07:50:37 CET 2005
Jan Trmal napsal...
> [...]
> Potreboval bych poradit, jestli nasledujici kod lze prepsat
> pomoci map().
>
> for i in B[key]:
> A[i] = B[key][i] / 100
Z dalších zpráv vyplývá, že B je dvojrozměrný slovník.
To znamená, že B[key] je slovník a key musí být
známo předem. Potom ale i B[key] může být zpřístupněno
referencí a vše se zjednoduší takto:
key = ...
...
BB = B[key]
for i in BB:
A[i] = BB[i] / 100
Místo jinde zmiňovaného [i/100 for i in B[key]]
můžeme místo seznamu hodnot generovat seznam
dvojic a pak použít konstruktor slovníku, který
ze seznamu dvojic udělá slovník:
A = dict( [ (i, BB[i] / 100) for i in BB ] )
(Místo BB může být samozřejmě B[key].)
Osobně bych ale dal přednost tomu prvnímu řešení,
které sice nevypadá tak frajersky, ale dá se
rychleji pochopit autorův záměr. Pokud není
ve všech situacích jisté, že B[key][i] existuje
pro každé myslitelné i, mělo by se to dále ošetřit,
aby se případná odchylka od předpokladu v budoucnu
líp hledala. Pro začátek by stačilo například:
key = ...
...
BB = B[key]
for i in BB:
assert i in BB # kontrola předpokladu
A[i] = BB[i] / 100
Právě kvůli takovým věcem a kvůli případným jiným
budoucím úpravám považuji tuto formu zápisu
za lepší, než výše uvedený jednořádkový ekvivalent.
--
Petr Prikryl (prikrylp at skil dot cz)
Další informace o konferenci Python