はじめに
辞書は、Python における基本的なデータ構造であり、キーと値のペアを格納することができます。時には、辞書を反転させる必要がある場合があります。これは、キーと値を交換することを意味し、値がキーになり、キーが値になります。このチャレンジでは、非一意のハッシュ可能な値を持つ辞書を反転させる関数を書くことが求められます。
辞書を反転させる
invert_dictionary(obj) という関数を書きましょう。この関数は、辞書 obj を入力として受け取り、キーと値を反転させた新しい辞書を返します。入力となる辞書は、非一意のハッシュ可能な値を持っています。2 つ以上のキーが同じ値を持つ場合、関数は出力辞書のリストにキーを追加する必要があります。
この問題を解決するには、次の手順を辿ることができます。
- 各キーの既定値として
listを持つcollections.defaultdictを作成します。 dictionary.items()をループと組み合わせて、dict.append()を使って辞書の値をキーにマッピングします。dict()を使って、collections.defaultdictを通常の辞書に変換します。
関数のシグネチャ:def invert_dictionary(obj: dict) -> dict:
from collections import defaultdict
def collect_dictionary(obj):
inv_obj = defaultdict(list)
for key, value in obj.items():
inv_obj[value].append(key)
return dict(inv_obj)
ages = {
'Peter': 10,
'Isabel': 10,
'Anna': 9,
}
collect_dictionary(ages) ## { 10: ['Peter', 'Isabel'], 9: ['Anna'] }
まとめ
このチャレンジでは、非一意のハッシュ可能な値を持つ辞書を反転させる方法を学びました。各キーの既定値として list を持つ collections.defaultdict を使用し、その後 dict.append() を使って辞書の値をキーにマッピングしました。最後に、dict() を使って collections.defaultdict を通常の辞書に変換しました。