Pythonで辞書を特定の長さに切り詰める方法(itertools.islice活用)
Pythonの辞書を指定した件数で切り詰める方法
Pythonの標準ライブラリに含まれる itertools モジュールには、ClojureやHaskellといった関数型言語から着想を得た、便利なイテレータ構成ブロックが数多く用意されています。その中のひとつが islice() 関数です。
islice() は、イテラブル(反復可能なオブジェクト)から特定の範囲の要素を選び出し、新しいイテレータとして返す関数です。スライス操作をイテレータに対して行えるため、大きなデータを扱う際にもメモリ効率が良いという特徴があります。
islice() の基本構文
islice(sequence, start, stop, step)
- sequence:対象となるイテラブルオブジェクト
- start:抽出を開始する位置(省略可能)
- stop:抽出を終了する位置
- step:要素を取得する間隔(省略可能)
辞書を最初の3項目に切り詰める例
次の例では、5つの要素を持つ辞書から islice() を使って最初の3項目のみを選択し、新しい辞書を作成しています。辞書の items() メソッドでキーと値のペアを取得し、それを islice() に渡している点がポイントです。
>>> D1={"pen":25, "pencil":10, "book":100, "sharpner":5, "eraser":5}
>>> import itertools
>>> D2=dict(itertools.islice(D1.items(),3))
>>> D2
{'pen': 25, 'pencil': 10, 'book': 100}このように、dict(itertools.islice(D.items(), n)) と書くだけで、元の辞書の先頭からn個の要素を持つ新しい辞書を簡単に作成できます。元の辞書 D1 は変更されないため、安全に処理を行えます。
なお、Python 3.7以降では辞書が挿入順序を保持するため、この方法で「先頭n件」を確実に取り出せます。それ以前のバージョンでは順序が保証されないため注意が必要です。
-
Pythonのtranslate()メソッドで文字列を一括置換・翻訳する方法
Pythonでは、文字列内の複数の文字をまとめて別の文字に置き換えたい場合、translate()メソッドを使うと効率的です。このメソッドは、str.maketrans()関数で作成した変換テーブルに基づいて文字を変換した新しい文字列のコピーを返します。また、オプションとして削除したい文字を指定すれば、該当する文字をすべて取り除くことも可能です。基本的な使い方以下の例では、母音「aeiou」をそれぞれ数字「12345」に対応付けて文字列を変換しています。intab = aeiou outtab = 12345 trantab = str.maketrans(intab, outtab) st
-
Python関数に辞書を引数として渡す方法をわかりやすく解説
Pythonでは、辞書(dict)をそのまま関数の引数として渡すことができます。関数の中では、受け取った辞書のキーと値のペアを順番に取り出して処理し、結果を出力することが可能です。 以下のコードでは、辞書 d を関数 f の引数として渡し、関数内で各キーと値のペアに対して「値 × 2」の計算を行っています。 例 d = {a: 1, b: 2, c: 3} def f(dict): for k, v in dict.items(): print(k, 2 * v) f(d) 出力 a 2 b 4 c 6 コードの解説 辞書 d には、キー a・b・c に対して、そ