Python 辞書 使い方 スクリプトの書き方

バイオインフォ道場、くまぞうです。

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... #要素

  ...
スポンサーリンク