リスト、タプル、集合、辞書のオブジェクトの種類を相互に変換する方法

リスト、タプル、集合、辞書のオブジェクトの相互変換のイメージ図

はじめに

 本ページでは、リスト(list)、タプル(tuple)、集合(set)、辞書(dict)の4種類のオブジェクトについて、オブジェクトの種類を相互に変換する方法を説明します。
 なお、集合は重複した要素を持たせられないこと、辞書は1つの要素がkeyとvalueの組み合わせで重複したkeyは設定できないことに留意して変換する必要があります。

タプル、集合、辞書からリストへの変換

>>> tup = ('A', 'B', 'C')
>>> list(tup)          # タプル -> リスト
['A', 'B', 'C']
>>>
>>> st = {'A', 'B', 'C'}
>>> list(st)           # 集合 -> リスト
['C', 'B', 'A']
>>>
>>> dic = {1:'A', 2:'B', 3:'C'}
>>> list(dic.keys())   # 辞書のkey -> リスト
[1, 2, 3]
>>> list(dic.values()) # 辞書のvalue -> リスト
['A', 'B', 'C']
>>> list(dic.items())  # 辞書の(key,value)のタプル->リスト
[(1, 'A'), (2, 'B'), (3, 'C')]
 タプル、集合、辞書からリストへ変換するには、list関数を使います。
 辞書については、各要素がkeyとvalueの組み合わせなので、keyかvalueのいずれか1つをリスト化する方法と、(key,value)の組み合わせのタプルをリスト化する方法とがあります。

リスト、集合、辞書からタプルへの変換

>>> lst = ['A', 'B', 'C']
>>> tuple(lst)          # リスト -> タプル
('A', 'B', 'C')
>>>
>>> st = {'A', 'B', 'C'}
>>> tuple(st)           # 集合 -> タプル
('C', 'B', 'A')
>>>
>>> dic = {1:'A', 2:'B', 3:'C'}
>>> tuple(dic.keys())   # 辞書のkey -> タプル
(1, 2, 3)
>>> tuple(dic.values()) # 辞書のvalue -> タプル
('A', 'B', 'C')
>>> tuple(dic.items())  # 辞書の(key,value)のタプル->タプル
((1, 'A'), (2, 'B'), (3, 'C'))
 リスト、集合、辞書からタプルへ変換するには、tuple関数を使います。
 リストへの変換の場合との違いは、使う関数が異なる点のみです。

リスト、タプル、辞書から集合への変換

>>> lst = ['A', 'B', 'C', 'A']
>>> set(lst)            # リスト -> 集合
{'C', 'B', 'A'}
>>>
>>> tup = ('A', 'B', 'C', 'A')
>>> set(tup)            # タプル -> 集合
{'C', 'B', 'A'}
>>>
>>> dic = {1:'A', 2:'B', 3:'C', 4:'A'}
>>> set(dic.keys())     # 辞書のkey -> 集合
{1, 2, 3, 4}
>>> set(dic.values())   # 辞書のvalue -> 集合
{'C', 'B', 'A'}
>>> set(dic.items())    # 辞書の(key,value)のタプル->集合
{(3, 'C'), (1, 'A'), (4, 'A'), (2, 'B')}
 リスト、タプル、辞書から集合へ変換するには、set関数を使います。
 なお、集合は重複した要素を持つことができないので、注意が必要です。上記の例では、リスト、タプル、辞書(value)に'A'という要素を2つ設定していますが、集合に変換すると1つに減っていることが分かります。
 辞書のkeyと(key,value)のタプルについては重複することはありませんので、集合に変換しても要素数が減ることはありません。

リスト、タプル、集合から辞書へ変換

dict関数の使い方

>>> lst = [(1, 'A'), (2, 'B'), (3, 'C')]
>>> dict(lst)
{1: 'A', 2: 'B', 3: 'C'}
 リスト、タプル、集合から辞書へ変換するには、dict関数を使います。
 辞書はkeyとvalueの組み合わせが必要なのでリスト、タプル、集合へと変換する場合とは少し勝手が違います。
 下記の例の様にdict関数を使う場合は、リストなどの各要素をkeyとvalueの組み合わせのタプルにします。

リスト、タプル、集合の要素を辞書のkey、同一の初期値をvalueとした辞書の作成

>>> lst = ['A', 'B', 'C', 'A']
>>> dict.fromkeys(lst, 0)      # リスト -> 辞書
{'A': 0, 'B': 0, 'C': 0}
>>>
>>> tup = ('A', 'B', 'C', 'A')
>>> dict.fromkeys(tup, 0)      # タプル -> 辞書
{'A': 0, 'B': 0, 'C': 0}
>>>
>>> st = {'A', 'B', 'C'}
>>> dict.fromkeys(st, 0)       # 集合 -> 辞書
{'C': 0, 'B': 0, 'A': 0}
 リスト等の要素をkeyとする辞書を作成し、valueは後で設定したいという場合もあります。その場合、辞書のfromkeys関数を使用することにより、第1引数で渡したリストなどの要素をkeyとし、第2引数で指定した値をvalueとした辞書を作成することができます。
 なお、辞書のkeyには重複したものを使用できませんので、重複した要素については自動的に1つのkeyとなります。この例ではリストとタプルに'A'という要素が2つありますが、作成された辞書のkeyには'A'は1つしか無いことが分かります。

リスト、タプル、集合の要素を辞書のvalue、0から始まる整数列をkeyとした辞書の作成

>>> # リスト -> 辞書
>>> lst = ['A', 'B', 'C']
>>> dict([(i, e) for i, e in enumerate(lst)])
{0: 'A', 1: 'B', 2: 'C'}
>>>
>>> # タプル -> 辞書
>>> tup = ('A', 'B', 'C')
>>> dict([(i, e) for i, e in enumerate(tup)])
{0: 'A', 1: 'B', 2: 'C'}
>>>
>>> # 集合 -> 辞書
>>> st = {'A', 'B', 'C'}
>>> dict([(i, e) for i, e in enumerate(st)])
{0: 'C', 1: 'B', 2: 'A'}
 ここでは、keyとvalueの組み合わせのタプルのリストを作り、dict関数に引数として渡して辞書を作っています。

関連項目

関数dict.items, keys, valuesの使い方の例
関数dict.fromkeysの使い方の例