実際に何もしない特別なキーを辞書に割り当てる方法はありますか?そのような私が実行したときにことを今ここに辞書にキーを挿入しない特別な値はありますか?
mydict = {}
key, value = 'foo', 'bar'
mydict[key] = value % now my dict has {'foo': 'bar'}
私はキーのいくつかの「特別な」値をしたい:
は、私のような何かをしたい
mydict[key] = value
それが実際に何もしません、そうmydictは{ 'FOO': 'バー'}ままである(余分なキーまたは値は添加しない)
私が使用してみました:
d[None] = None # It actually adds {None: None} to the dict
d[] = [] # Invalid syntax
私はこれが必要な理由:
まあ、それは最初のケースを処理するために、基本的にですが。
Iは実際FASTAフォーマットのファイルを有する:
>id_3362
TGTCAGTGTTCCCCGTGGCCCTGCGGTTGGAATTGCAGCGGGTCGCTTTAGTTCTGGCAT
ATATTTTGACGGTGCCGGCCGGCGATACTGACGTGTGAGGACTTGAATTTGTACCAGCGC
AACACTTCCAAAGCCTGGACTAGGTTGT
>id_4743
CGGGGGATCTAATGTGGCTGCCACGGGTTGAAAAATGG
>id_5443
ATATTTTGACGGTGCCGGCCGGCGATACTGACGTGTGAGGACTTGAATTTGTACCAGCGC
AACACTTCCAAAGCCTGGACTAGGTTGT
私のアプローチは、次のキーが発見されるまで(ライン>で始まる)配列にラインを連結、ライン毎に読み取ることです。 次に、関連付けられた値(シーケンス)を持つキー(id)を辞書に保存し、キーを更新して次のシーケンスの累積を開始します。
もちろん、最初のケース(きれいなアプローチではないと思います)を処理する専用のコード(繰り返し)を持つことができます。または、各ライン(毎回実行する)を読み取るループ内にif
を含めることができます。
idが見つかるたびに最もきれいな方法があります。累積seqを持つ前のidをdictionayに保存しますが、最初の行を処理するためにはキーの特別な値が必要です。ここで
は私のコードです:辞書に:
def read_fasta(filename):
mydict = {}
id = None # this has to be the special character I'm looking for
seq = ''
with open(filename) as f:
for line in f:
if line[0] == '>':
mydict[id] = seq # save current id and seq
id = line[1:].rstrip('\n') # update id
seq = '' # clean seq
else:
seq += line.rstrip('\n') # accumulate seq
あなたが見ることができるように、このコードでは最初の行は、{「」}なし値を挿入します。
私は当然このキーを削除することができますが、実行時に何も挿入しない初期値を持つことができるかどうかは疑問です。
提案がありますか?
をポイントは何ですか?なぜか:最初の場所に挿入しないでください: 'idがNoneでない場合:mydict [id] = seq' –
実際にはオプションですが、後で削除する必要のある無駄なものを挿入することを意味します。私はちょうどこれを行うための "クリーナー"の方法があるのだろうかと思っています。 –
提案された 'if'は、キーを持つ行が見つかるたびに実行されるためです。数百万の鍵を持つファイルでは、最初のケースを処理するたびに条件を実行します。 –