Skip to content

3.7 もっと大きいデータ構造

ここまで学んできた組み込みデータ構造(リスト、タプル、集合、辞書)を組み合わせれば、もっと大きくて複雑な独自のデータ構造を作ることができます。

まずは、部品となる3種類のリストを用意します。

marxes = ['Groucho', 'Chico', 'Harpo']
pythons = ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']
stooges = ['Moe', 'Curly', 'Larry']

個々のリストを要素とするタプルを作ることができます。

tuple_of_lists = (marxes, pythons, stooges)
print(tuple_of_lists)
# (['Groucho', 'Chico', 'Harpo'], ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'], ['Moe', 'Curly', 'Larry'])

3つのリストを要素として含む、大きなリストを作ることもできます。

list_of_lists = [marxes, pythons, stooges]
print(list_of_lists)
# [['Groucho', 'Chico', 'Harpo'], ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin'], ['Moe', 'Curly', 'Larry']]

キーとしてグループの名前(文字列)を使い、値としてメンバーのリストを使う辞書を作ることもできます。

dict_of_lists = {'Marxes': marxes, 'Pythons': pythons, 'Stooges': stooges}
print(dict_of_lists)
# {'Stooges': ['Moe', 'Curly', 'Larry'], 'Marxes': ['Groucho', 'Chico', 'Harpo'], 'Pythons': ['Chapman', 'Cleese', 'Gilliam', 'Jones', 'Palin']}

データ構造を組み合わせる際の制限

Section titled “データ構造を組み合わせる際の制限”

複雑なデータ構造を作る際、制限となるのはデータ型自体の性質です。

たとえば、辞書のキーはイミュータブル(変更不可)でなければならないという厳格なルールがあります。 そのため、ミュータブルなデータ構造である「リスト」「辞書」「集合」は、別の辞書のキーにはなれません。

しかし、タプルはイミュータブルなので、辞書のキーになれます。 これを利用すると、たとえばGPS座標(緯度、経度、高度のタプル)をインデックスとした辞書を作ることができます。

# タプルをキーにした辞書の例
houses = {
(44.79, -93.14, 285): 'My House',
(38.89, -77.03, 13): 'The White House'
}
print(houses[(44.79, -93.14, 285)]) # 'My House'