ディクショナリ

ディクショナリはキーと値がセットになって保存されるオブジェクト(変数)型である。例えば GUU を与えると V を出力したり、AUG を与えると M を出力したりするような辞書的な機能を持つ。この場合、GUU と AUG をキーといい、V と M を値という。他のプログラミング言語のハッシュやマップなどに似ている。

ディクショナリの作成

ディクショナリはキーと値が 1 セットとなるように作成する。

codon = {'UUU' : 'F', 'CUU' : 'L', 'AUU' : 'I'}

print(codon['CUU'])
## 'L'

ディクショナリ要素の取得

ディクショナリの要素の値を取得するとき、キーを指定して取得する。ディクショナリに指定したキーが存在していれば、そのキーに対応する値は返されるが、キーが存在しなければエラーが出る。

codon = {'UUU' : 'F', 'CUU' : 'L', 'AUU' : 'I'}

print(codon['CUU'])
## 'L'

print(codon['UGU'])
## Traceback (most recent call last):
##   File "", line 1, in 
## KeyError: 'UGU'

ディクショナリを利用する際に、与えたキーが存在しない時にエラーが起きるため、値を取得する前にキーの存在確認を行う必要がある。

codon = {'UUU' : 'F', 'CUU' : 'L', 'AUU' : 'I'}

print('UUU' in codon)
## True

print('UGU' in codon)
## False

k = 'CAC'
if k in codon:
    print(codon[k])
else:
    print('*')
## *

for 文を利用することで、ディクショナリ中のすべての要素を取り出すことができる。ただし、取り出される順番は、保存した順番とは限らない。


codon = {'UUU' : 'F', 'CUU' : 'L', 'AUU' : 'I'}

for k, v in codon.items():
    print(k + ":" + v)
## CUU:L
## AUU:I
## UUU:F

for k in codon.keys():
    print(k + ":" + codon[k])
## CUU:L
## AUU:I
## UUU:F

for v in codon.values():
    print(v)
## L
## I
## F

ディクショナリ要素の更新

ディクショナリ要素の追加と変更

既存のディクショナリの要素を変更するには、ディクショナリに該当のキーを入れて、新しい値を代入すればよい。

dict = {'UUU': 'F', 'UAU': 'Y'}
print(['UUU'])
## F
dict['UUU'] = '*'
print(['UUU'])
## *

ディクショナリに新しいキーと要素を追加する場合は、要素の更新と同じ要領で行う。

dict = {'UUU': 'F', 'UAU': 'Y'}
k = 'AUU'

if k not in dict:
    dict['AUU'] = 'I'

print(dict)
## {'UUU': 'F', 'UAU': 'Y', 'AUU': 'I'}

ディクショナリの update メソッドを利用すると、複数のキーと値を一括に更新あるいは追加することができる。

dict = {'UUU': 'F', 'UAU': 'Y'}
dict_new = {'CUU': 'L', 'AUU': 'I'}

print(dict)
## {'UAU': 'Y', 'UUU': 'F'}

dict.update(dict_new)
print(dic_1)
## {'UAU': 'Y', 'AUU': 'I', 'CUU': 'L', 'UUU': 'F'}

ディクショナリ要素の削除

キーの削除は del または pop を利用する。del はキーと値を削除するだけであるのに対して、pop はキーと値を削除してから、その値を返す。


codon = {'UUU' : 'F', 'CUU' : 'L', 'AUU' : 'I'}

del codon['UUU']
print(codon)
## {'CUU': 'L', 'AUU': 'I'}

c = codon.pop('CUU')
print(c)
## 'L'
print(codon)
## {'AUU': 'I'}

2 次元ディクショナリ

Python では多次元のディクショナリを簡単に作成できる。具体的に 1 層目ディクショナリの値に、もう 1 つのディクショナリを代入すればよい。

gene = {'ers1': {}, 'etr1': {}, 'ein3': {}}
gene['ers1'] = {'TAIR': 'AT2G40940', 'desc' : 'ethylene response sensor 1', 'loci': 'Chr2:17084321-17087326'}
gene['etr1'] = {'TAIR': 'AT1G66340', 'desc' : 'ethylene sensor', 'loci': 'Chr1:24734162-24737756'}
gene['ein3'] = {'TAIR': 'AT3G20770', 'desc' : 'ethylene insensitive 3', 'loci': 'Chr3:7260429-7263384'}

print(gene['ein3']['loci'])
## Chr3:7260429-7263384