この 2 行のコードを 1 行にまとめたいと思います。
for n in exceptions:
my_dict[n] += 1
辞書をインクリメントするための小さなステートメントに 2 行かかるのが気になります。この問題も誰かを悩ませていると確信しています。
この 2 行のコードを 1 行にまとめたいと思います。
for n in exceptions:
my_dict[n] += 1
辞書をインクリメントするための小さなステートメントに 2 行かかるのが気になります。この問題も誰かを悩ませていると確信しています。
for n in exceptions: my_dict[n] += 1
...しかし、ステートメントが 2 行であることに問題はありません。いくつかの Pythonコーディング ガイドライン (PEP8)があり、コアの読みやすさを強く推奨しています。これらのステートメントを 1 行に入れると、可読性が低下します。
PEP8から:
場合によっては、if/for/while を小さな本体で同じ行に配置しても問題ありませんが、複数句のステートメントに対しては決してこれを行わないでください。また、そのような長い行を折りたたむことも避けてください!
my_dict.update({n: my_dict[n] + 1 for n in exceptions})
これは基本的にdict.updateを使用して、別の辞書の値で辞書を更新します。もう 1 つの辞書は、辞書内包表記を使用して作成されます。残念ながら、my_dict[n] += 1
効果を得るには、式で値を明示的に再度読み取る必要があります。
しかし、これに単純で明確なfor ループを使用するよりも優れているとしたら、私は多くのことを主張します。
一方、例外を数えているだけのように見えるので、辞書にカウンターを使用することを検討することをお勧めします。これは本質的に改良された辞書 (通常の辞書と同じように使用できることを意味します) ですが、ものを数えるのに最適ないくつかの機能が付属しています。たとえば、上記のステートメントを次のように簡略化できます。
my_dict.update({n: 1 for n in exceptions})
または、1
それぞれを追加するだけなので、イテラブルexceptions
を直接渡すことができます。
my_dict.update(exceptions)
これには、my_dict
まだ存在しない例外が自動的に初期化されるという利点もあります。既存の辞書から Counter を作成するには、元の辞書を Counter コンストラクターに渡すだけです。
from collections import Counter
my_dict = Counter(my_dict)