《13》データ構造(3)辞書〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《13》データ構造(3)辞書
関連記事
今日の進捗
- Tutorial: Brief Tour of the Standard Library
- Python.use(better) -- セミナー研修テキスト
- ヒストグラム課題を「続・ひよ子のきもち」で公開
Comment | |
---|---|
本人:野中 | 伊藤さんとは今日までですね。いろいろとありがとうございました。 |
担当:伊藤 | インターンシップでは、Java/C#などを利用するかもしれませんが、今回のPythonで学んだ経験は、きっといつかどこかで役立つと思います。 |
ヒストグラム課題(3)辞書
〈実録 はじめての…《12》データ構造(2)辞書 - 続・ひよ子のきもち〉で作成した関数 strip を利用して、ヒストグラム課題を完成させると、次のようになります(未完)。
keywords = ( "and", "class", "def", "del", "elif", "else", "for", "if", "import", "in", "not", "or", "print", "return", ) def ex(): histo = dict*1 keys = histo.keys(); keys.sort() print keys # (2) for e in keys: v = histo[e] print format%(e, v, scale(v))
(ここでは課題として)組み込み型 dict のメソッド keys/values/items などを利用しています。すると、
>>> ex() {'and': 2, 'elif': 0, 'or': 0, 'return': 2, 'for': 3, 'else': 2, 'print': 7, 'del': 1, 'in': 4, 'not': 3, 'import': 1, 'class': 1, 'def': 8, 'if': 7} and[2].. elif[0] or[0] return[2].. for[3]... else[2].. print[7]....+.. del[1]. in[4].... not[3]... import[1]. class[1]. def[8]....+... if[7]....+.. ['and', 'class', 'def', 'del', 'elif', 'else', 'for', 'if', 'import', 'in', 'not', 'or', 'print', 'return'] and[2].. class[1]. def[8]....+... del[1]. elif[0] else[2].. for[3]... if[7]....+.. import[1]. in[4].... not[3]... or[0] print[7]....+.. return[2]..
この結果を見ると、最多のキーワードは def で、その出現頻度は 8 だと分かります。
何が問題か
また、メソッド list.sort の副作用を期待しているときには、次のようにしても、
keys = histo.keys().sort() # Boo!
(リターン値として None が得られ)期待した結果は得られないので、注意が必要です。
《Note》ここで利用した関数/メソッド群(紹介しなかった各論)については〈関連記事〉に譲ります。クラスについて学習した後で、この課題を再構成するので、楽しみにしていてください。□
Tips
ここでは「副作用を期待している」という注意を促すために、セミコロン「;」を使って、コードの断片を「同じ行に」記述しています。これも、書き手の意図を読み手に伝えたいときの工夫のひとつです。《うさぎ》
*1:e,0) for e in keywords) for s in open("queens.py"): for e in strip(s).split(): for word in keywords: if e == word: histo[e] = histo.get(e, 0)+1 print histo # (1) format = "%%%ds[%%%dd]%%s"%( max(len(e) for e in histo), len(str(max(histo.values()))), ) for k,v in histo.items(): print format%(k, v, scale(v