Pythonの辞書では、キーに対して複数の値を持たせる基本的な方法は、値をリストやタプル、セットなどのコレクションで管理することです。しかし、この方法だと値を挿入する際に既に値があるかチェックし、なければ空のリストを挿入する、という操作が必要になります。
以下に、Pythonで辞書に複数の値を効率的に持たせる方法をいくつか紹介します。
dict.setdefault()を使う
setdefault()
はdictから値を取得する際に指定のキーがなければデフォルト値を設定してくれます。
results = {}
for word in words:
results.setdefault(word[0], []).append(word)
この方法を使うと、dictへのアクセスが1回で済むようになります。
collections.defaultdictを使う
defaultdict
でも同じようなことができます。コンストラクタでデフォルト値を作成する関数を指定します。[]
でキーを参照したときに、なければデフォルト値が設定されます。
from collections import defaultdict
results = defaultdict(list)
for word in words:
results[word[0]].append(word)
itertools.groupbyを使う
groupby
を使うとリストを任意のキーでグルーピングできます。この結果で辞書を作成すれば目的の結果が得られます。ただしgroupby
に渡すリストは事前にソートする必要があります。
from itertools import groupby
from operator import itemgetter
results = {k: list(v) for k, v in groupby(sorted(words), key=itemgetter(0))}
これらの方法を使うと、Pythonの辞書でキーに対して複数の値を効率的に持たせることができます。適切な方法を選んで、Pythonプログラミングをより効率的に行いましょう。.