バイオインフォ道場、くまぞうです。
Pythonで複数のデータをキー(単語やIDなど)で管理するには、辞書を使うと便利です。辞書を使うための簡単な操作を確認します。
スポンサーリンク
Python 辞書
Pythonの辞書は、キーとデータが対になった複数の箱のようなものです。キーを指定してデータを格納したり取り出したりします。辞書にはいろんな種類のオブジェクトを入れることができます(数値・文字列・リストなど)。辞書の大きさは自動で調整されます。他のプログラミング言語のハッシュのような構造です。
Python 辞書の使い方
基本的な操作
辞書の定義
Pythonの辞書は中カッコ({})で囲みます。辞書内のデータはキーとデータをコロン(:)で1組とし、それぞれの組はカンマ(,)で区切ります。1つ1つのデータは要素と呼ばれます。
>>> aaa = {"id1":"name1", "id2":"name2", "id3":"name3"}
キーを指定したデータへのアクセス
辞書の要素にアクセスするには、キーを指定します。
>>> aaa = {"id1":"name1", "id2":"name2", "id3":"name3"}
>>> aaa["id1"]
'name1'
>>> aaa["id3"]
'name3'
データの追加
新しいキーを指定して、データを追加します。
>>> aaa = {"id1":"name1", "id2":"name2", "id3":"name3"}
>>> aaa["id4"] = "name4"
>>> aaa
{'id4': 'name4', 'id2': 'name2', 'id3': 'name3', 'id1': 'name1'}
データの変更
新しいキーを指定してデータをセットすると、対応する要素が更新されます。
>>> aaa
{'id4': 'name4', 'id2': 'name2', 'id3': 'name3', 'id1': 'name1'}
>>> aaa["id4"] = "NAME4"
>>> aaa
{'id4': 'NAME4', 'id2': 'name2', 'id3': 'name3', 'id1': 'name1'}
データの削除
辞書のデータの削除は、del関数でキーを指定します。
>>> aaa
{'id4': 'NAME4', 'id2': 'name2', 'id3': 'name3', 'id1': 'name1'}
>>> del aaa["id4"]
>>> aaa
{'id2': 'name2', 'id3': 'name3', 'id1': 'name1'}
便利な操作
key(キー)一覧の取得
辞書に登録されたキーの情報を得ることができます。keys関数を使います。
>>> aaa.keys() ['id2', 'id3', 'id1']
要素ー情報の取得
辞書に登録された要素の情報を得ることができます。values関数を使います。
>>> aaa.values() ['name2', 'name3', 'name1']
key(キー)登録の確認
辞書にキーが登録されているかを確認ことができます。has_key関数を使います。
>>> aaa.keys()
['id2', 'id3', 'id1']
>>> aaa.has_key('id1')
True
>>> aaa.has_key('id4')
False
サンプル
辞書を使った、Pythonのスクリプト例です。fastaファイルを読みこんでデータを辞書に格納します。最後にヘッダーをキーにしてデータを取り出します。
dic_test.py
#! /usr/local/bin/python
# -*- coding: utf-8 -*-
file_name = "my.fasta"
d_fasta = {}
p_key = ""
p_val = ""
f = open(file_name, "r")
for line in f.readlines():
if line[0] == '>':
if p_key != "":
d_fasta[p_key] = p_val # 辞書にセット
p_key = ""
p_key = line[1:].strip()
p_val = ""
else:
p_val += line.strip()
f.close()
d_fasta[p_key] = p_val
print d_fasta.keys() # キー情報
print
for x in d_fasta.keys():
print x
print d_fasta[x]+"\n" # キーに対応した要素
my.fasta
>cds1 ATGGTGGGTGGCAAGAAGAAAACCAAGATATGTGACAAAGTGTCACATGA TTTGGCAATCGGTTCCTGGATTGGACTTAGACCCCTACGCATCCTCAAAT GAAATGTTGCCAACGCTTCTTGAGAGCTGCCCAAAACTTGAATCTCTCAT >cds2 ATGGTTCAATATAATTTCAAGAGGATCACAGTTGTTCCCAATGGGAAGGA GCACGTCGTGGTGAAGCTGACAGAGTTATACCAACGCTTAGACCGAAACA AACCGACAGGCGTTGA >cds3 ATGACTCGTTTGTTGCCTTACAAAGGTGGAGATTTTTTGGGACCGGATTT CCGAGGTATACCTCTACCTTATCTTTCTGAATTAACTGTGAGCTTCATAG GCAAAAATTAAGATTGGTGAATGCTCAAAACGTAAAAAGGATAAGCAAGT >cds4 ATGGATTCAGAGTCAGAGTCAAAGCTCATATCATTCATTTCTCAATTAGT ATCATGCATGATACAAACAATCTCTCTGGTCAGCTCAATGGATTTGAAGT ATCTATTTCGGTAACTTCTTCTCATGTATGCAATGTGATTATATTCTCCA >cds5 ATGTCGGTTCCTCCTAGATTCCGGTCCGTAAATTCCGATGAGCGAGAGTT GCTGCAGAGGAAACCACCGGGGATGAAACTGGAGAAGCCGATGATGGAGA GAGAGAGAGTGATAAATAA
実行と結果
$ ls my.fasta dic_test.py $ python dic_test.py ['cds1', 'cds2', 'cds3', 'cds4', 'cds5'] #キー一覧 cds1 #キー ATGGTGGGTGGCAAGAA... #要素 cds2 #キー ATGGTTCAATATAATTT... #要素 ...
スポンサーリンク
![バイオインフォ 道場 [bioinfo-Dojo]](https://bioinfo-dojo.net/wp-content/uploads/2016/03/some_object_luca-bravo-alS7ewQ41M8-unsplash.jpg)

