Google App Engine で select distinct

Standard
Google App Engine で select distinct

Python のSet クラスに感動したのでメモ。
Google App Engine でアプリケーションを開発するとき、データはGoogle Data Store 上に保存する。保存したデータを参照するときはGQLのクエリーを発行するんだけど、GQLにはSQLでいうところのdistinct関数がない。で、distinct使いたいときはアプリ側で処理する必要があるんだけど、Python には Set クラスっていうイケメンなやつがいた。
 

>>> a = [1,1,1,2,2,3,4,5,6,6,6,7,8,9,9,9]
>>> b = set(a)
>>> b
set([1, 2, 3, 4, 5, 6, 7, 8, 9])

 
 
しかもSet 先輩は in っていうしゃかりきな舎弟を連れてる。
たとえば、↓みたいなStreetFighterモデルが保存されてたとして、
ID | name | from
——————
1000 | Ryu | Japan
1001 | Ken | USA
1002 | EHonda | Japan
1003 | Chun-Li | China
1004 | Blanka | Brasil
2001 | Zangief | Russia
2002 | Guile | USA
2003 | Dhalsim | India
 
この中から出身地の一覧を取得したいときは↓みたいな感じに書く。
 

fighters = StreetFighters.all()
fighters_from = []
for f in fighters:
  fighters_from.append(f.from)
results_fighters_from = []
for result in fighters_from:
  if result not in results_fighters_from:
    results_fighters_from.append(result)

 
これで、
results_fighters_from = ['Japan','USA','China','Brasil','Russia','India']
になる。んー、かっこいい。オレが女ならとりあえず同じ部活にマネージャーで入部しとく。