2018年08月01日

言語処理100本ノックでPython入門 #62 - KVSの反復処理

  

今日は、言語処理100本ノック 2015の第7章・問題62を解きます。


■ 問題
62. KVS内の反復処理
60で構築したデータベースを用い,活動場所が「Japan」となっているアーティスト数を求めよ.

■ Pythonのコード
import redis

def countjapan():
    r = redis.StrictRedis(host='localhost', port=6379, db=0)
    keys = r.scan_iter()
    count = 0
    for key in keys:
        v = r.get(key)
        if v == b'Japan':
            count = count + 1
    print(count)

def main():
    countjapan()

if __name__ == '__main__':
    main()

■ ちょっと説明

ものすごく力業っぽいコードだけど、Redisが良く分かっていないので、 この方法しか思いつかなかったです。 

この問題のお題が「反復処理」ってあるから、これでいいのだと思うけど... 遅いです。まあ、このコードじゃ仕方ないよね。 

なお、取り出した値は、バイト列なので、b'Japan'で比較しました。


■ Redisサーバーの停止

  それと、Redisサーバーを停止する正しい方法がわからず悩みました。
$ redis-cli
で、Redisのコマンドラインを起動して、そこで、
> shutdown save
とタイプすれば、停止することができました。

このコマンドラインを終了するには、
> exit
とします。