Pythonの辞書には値に対応するキーが存在しますが、キーを複数の値に対応させたい場合は以下の方法で実現できます。
方法 1: キー対応リストを作成する
name_list = ['Mary', 'Jack']
age_list = [10, 12]
stu_dict = {
'name': name_list,
'age': age_list
}
print(stu_dict)
出力は次のとおりです。
{
'name': ['Mary', 'Jack'], 'age': [10, 12]}
方法 2: dict.setdefault() メソッドを使用する
stu_dict_1 = {
}
key1 = 'name'
key2 = 'age'
# 使key对应一个空列表,并使用.append()方法对空列表进行元素的添加
stu_dict_1.setdefault(key1, []).append('Mary')
stu_dict_1.setdefault(key1, []).append('Jack')
stu_dict_1.setdefault(key2, []).append(10)
stu_dict_1.setdefault(key2, []).append(12)
print(stu_dict_1)
出力は次のとおりです。
{
'name': ['Mary', 'Jack'], 'age': [10, 12]}
方法 3: collections.defaultdict クラスを使用する
from collections import defaultdict
stu_dict_2 = defaultdict(list)
stu_dict_2['name'].append('Mary')
stu_dict_2['name'].append('Jack')
stu_dict_2['age'].append(10)
stu_dict_2['age'].append(12)
print(stu_dict_2)
出力は次のとおりです。
defaultdict(<class 'list'>, {
'name': ['Mary', 'Jack'], 'age': [10, 12]})
Defaultdict は、Python の組み込み dict クラスのサブクラスであり、factory_function を入力として使用します。この Factory_function には、list、set、str などが使用できます。
dict = defaultdict(factory_function)
実際の使用では、複数の値に対応する 1 つのキーを持つ辞書が必要になるだけでなく、複数の値の重複除去も必要になる場合がありますが、この場合は、defaultdict(set) の辞書を作成するだけで済みます。
stu_dict_3 = defaultdict(set)
stu_dict_3['name'].add('Mary')
stu_dict_3['name'].add('Jack')
stu_dict_3['age'].add(10)
stu_dict_3['age'].add(10)
print(stu_dict_3)
出力は次のとおりです。
defaultdict(<class 'set'>, {
'name': {
'Mary', 'Jack'}, 'age': {
10}})