[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