テンプレートエンジンの一部

スランプの脱出のためには焦らずに簡単な問題を解くこと、というわけでたまたまメーリングリストに流れていたこの問題が10行程度で書けると思ったので書いた。

http://www.python.jp/pipermail/python-ml-jp/2009-January/004602.html

def resolve(query):
 base, rest = query.split(".", 1)
 base = globals()[base]
 keys = rest.split(".")
 for k in keys:
  if isinstance(base, list):
   base = base[int(k)]
  else:
   base = base[k]

 return base

mylist = ["foo", "bar", "baz"]
mydict = {"foo": 1, "bar": 2}
mynested = [{"foo": [1, 2, 3]}]

print resolve("mylist.1") # bar
print resolve("mydict.bar") # 2
print resolve("mynested.0.foo.2") # 3

僕の認識では10行1関数で書けちゃう問題は「緩いボール」に相当する。