Pythonの文法、基礎の基礎特集:Visual Studioで始めるPythonプログラミング(3/4 ページ)

» 2016年10月03日 05時00分 公開
[かわさきしんじInsider.NET編集部]

辞書

 辞書は「キー/値」の組の集合である。連想配列といってもよい。リストやタプルは順序を持つ(それらの大小を比較できる)が、辞書には順序がない。以下に例を示す。

>>> d = { 'forum1': 'Windows Server Insider'# 文字列をキーとした辞書の作成
...       'forum2': 'Insider.Net',
...       'forum3': 'Server & Storage' }
...
>>> d['forum1']
'Windows Server Insider'
>>> d.items()  # キー/値の列挙
dict_items([('forum1', 'Windows Server Insider'), ('forum3', 'Server & Storage'), ('forum2', 'Insider.Net')])
>>> d.keys()   # キーの列挙
dict_keys(['forum1', 'forum3', 'forum2'])
>>> d.values() # 値の列挙
dict_values(['Windows Server Insider', 'Server & Storage', 'Insider.Net'])
>>> d['forum4'] = 'Coding Edge'  # 要素の追加
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.Net', 'forum4': 'Coding Edge'}
>>> d.update({'forum3': 'System Insider'})  # 要素の書き換え
>>> d.update(forum4='Server & Storage')     # 要素の書き換え
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'System Insider', 'forum2': 'Insider.Net', 'forum4': 'Server & Storage'}
>>> d2 = { 0: 'Windows Server Insider'# 整数値をキーとした辞書の作成
...        1: 'Insider.NET',
...        2: 'Server & Storage' }
...
>>> d2[0]
'Windows Server Insider'
>>> d3 = { (0, 0): 'Windows Server Insider'# タプルをキーとした辞書の作成
...        (0, 1): 'Insider.NET',
...        (1, 0): 'Server & Storage' }
...
>>> d3[(1,0)]
'Server & Storage'
>>> d4 = dict([('forum1', 'Windows Server Insider'), # dict()関数を使用
...            ('forum2', 'Insider.NET'),
...            ('forum3', 'Server & Storage')])
...
>>> d4
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.NET'}
>>> d5 = dict(forum1='Windows Server Insider', forum2='Insider.NET')
>>> d5
{'forum1': 'Windows Server Insider', 'forum2': 'Insider.NET'}


辞書の使用例

 辞書オブジェクトはdictクラスのインスタンスであり、上で見たように、キー/値の組、キー、値のそれぞれについて辞書ビュー(辞書の内容の変更に動的に追随する、反復可能なオブジェクト)を返送するitemsメソッド、keysメソッド、valuesメソッドを持つ。

 また、組み込みのdict関数を使用すると、2つの要素で構成されるタプル(を含むリストなど)から辞書を作成できる。最後の例では、dict関数にキーワード引数とその値を指定して辞書を作成している。

 Pythonの辞書で重要なのは、キーには不変値を含むことはできない。簡単にいえば、リストや辞書を(別の)辞書のキーとすることはできないことに注意(リストを要素に含むタプルもキーにはできない)。

集合

 集合はその名の通り、数学的な集合を表すためのものだ。集合にある値が含まれているかどうかのチェックや、集合間の各種演算がサポートされている。辞書と同様に、集合にも順序はない。また、集合には変更可能な「集合」(set)と変更不可能な「frozenset」の2種類がある。

 以下に例を示す。集合は辞書と同様に{}を使用して記述する(ただし、辞書はキー/値の組を並べていったが、集合では単一要素を並べていく)。また、frozensetは作成したら変更はできないので、何らかの要素を基にしてfrozenset関数を呼び出すことで作成する。

>>> s1 = { "Windows Server Insider", "Insider.NET", "System Insider" }
>>> s2 = s1.copy()
>>> s2.add("Coding Edge")
>>> s1
{'System Insider', 'Windows Server Insider', 'Insider.NET'}
>>> s2
{'System Insider', 'Windows Server Insider', 'Coding Edge', 'Insider.NET'}
>>> s2 - s1  # 差集合
{'Coding Edge'}
>>> s2.difference(s1)    # 差集合
{'Coding Edge'}
>>> s2.intersection(s1)  # 共通集合
{'System Insider', 'Windows Server Insider', 'Insider.NET'}
>>> s1 >= s2  # s1がs2を包含しているか
False
>>> s2 >= s1  # s2がs1を包含しているか
True
>>> s1 ^ s2   # 対称差(どちらかにのみ含まれている要素からなる集合)
{'Coding Edge'}
>>> s1.add("Server & Storage"# s1に要素を追加
>>> s1 ^ s2   # 対称差
{'Server & Storage', 'Coding Edge'}
>>> s2 > s1   # もはやs1はs2の部分集合ではない
False
>>> s3 = { "Build Insider" }
>>> s3.isdisjoint(s1)  # s3とs1は互いに素(共通する要素を持たない)
True
>>> fs = frozenset(s1) # s1を基にfrozensetを作成
>>> fs
frozenset({'Server & Storage', 'System Insider', 'Windows Server Insider', 'Insider.NET'})
>>> fs.add("Build Insider"# frozensetは変更不可能
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'


集合の利用例

 set関数を使うと、リストなど、他のオブジェクトから集合を作成することもできる。

>>> lst
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> s4 = set(lst)  # set関数を利用してリストから集合を作成
>>> s4
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.Net'}
>>> s5 = set(d)   # set関数を利用して辞書から集合を作成。値は落とされ、キーだけが残る
>>> s5
{'forum1', 'forum3', 'forum2'}
>>> s6 = set(d.items())  # set関数に辞書ビュー(反復可能オブジェクト)を渡して、集合を作成
>>> s6
{('forum2', 'Insider.Net'), ('forum3', 'Server & Storage'), ('forum1', 'Windows Server Insider')}


set関数の使用例

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。