質問にある
このなかで)や!、数字など、アルファベット以外の文字をこの辞書や総文字数から消したいです。
に対して回答します。
まず、辞書に残したい文字だけから構成される文字列を作るか、import します。今回は大文字、小文字問わず、アルファベットのみを残すということなので、他のご回答にもあるように、stringモジュールの ascii_letters を使います。
python3
1from string import ascii_letters
これは、以下のように半角アルファベット小文字と大文字のすべてから構成される文字列です。
python3
1print(ascii_letters)
出力:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
さて、質問にあるような、以下のような内容
{'d': 0, 'e': 1, ')': 9, ':': 10, '<': 12, '=': 13, '0': 14, '!': 19, '2': 32}
の辞書 d
があり、文字の合計数、すなわち上記の辞書の各文字の出現回数の合計(110です。)が total_count
という変数に入っているとします。
python3
1print(total_count)
出力:
110
このとき、アルファベット以外の文字を辞書d
から消し、かつ、その文字の出現回数を total_count
から引いていくには、以下のようにします。
まず、d
に含まれるキーのうちアルファベット以外のもののリストを作ります。それにはこうします。
python3
1non_alphabetic_letters = [k for k in d.keys() if not k in ascii_letters]
2
3print(non_alphabetic_letters)
出力:
[')', ':', '<', '=', '0', '!', '2']
そして、non_alphabetic_letters
に含まれる文字をひとつずつ取り出し、それを d
から削除しつつ、その文字の出現回数を total_count
から引いていくには以下のようにします。
python3
1for k in non_alphabetic_letters:
2 total_count -= d.pop(k)
3
4
5print(d)
6print(total_count)
出力:
{'d': 0, 'e': 1}
1
以下は上記で説明した内容を、コンソールから確認しています。
なお、d.pop(k)
は、 変数k
で与えられるキーが d
にない場合、KeyError
を発生します。もし、このエラーの発生を抑えたい場合には、第二引数で、k
で与えられるキーがd
にない場合に返す値を指定します。
python3
1{'x': 1}.pop('a', 0) # 0が返される。
先に挙げたコードでは、
python3
1for k in non_alphabetic_letters:
2 total_count -= d.pop(k)
としており、 pop()
に第二引数を与えていないです。これは、k
が必ずd
に含まれるキーだと分かっているので、省略しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。