COBOL技術者の憂鬱

COBOLプログラマは不在にしています

pythonicな構文

昨日書いたように、テキストマイニングと絡んで、「集合知プログラミング」という本を最近読み始めたんですが、そこに掲載されているサンプルのプログラムが結構面白くてはまっています。
二年ほど前にこの本読んだ時はさっぱり意味がわからなかったんですが、どうやらこの二年ほどですっかり毒されてしまったらしく、楽しんで読むことができるようになってしまっているようです。

#人々の映画に対する評価をディクショナリで
critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
 'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5, 
 'The Night Listener': 3.0},
'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5, 
 'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0, 
 'You, Me and Dupree': 3.5}, 
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
 'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}

#二人の趣味嗜好がどのくらい似ているかを数値化して返す
def sim_distance(prefs,person1,person2):
    return sum([pow(prefs[person1][item]-prefs[person2][item],2) for item in prefs[person1] if item in prefs[person2]])


普段COBOLでずっとコード書いていて、いきなりこういった世界に飛び込むと目眩がしそうなほど刺激的な感じがしますね。
パッと見たところは、なんでこんな短いコードでそんな複雑なことができるのかと不思議に思うんですが、ちゃんとコード読むと、なるほどなーっと思わされます。