Pythonの辞書(dict)はキー・バリューのデータを格納できる変数型です。
今回は辞書に要素が何も含まれていない状態(空)かどうか判断する方法について、現役エンジニアが正確に解説しています。
- 辞書を空にする方法
- 辞書が空か、要素が含まれているか判定する
辞書(dict)のキーによる検索の仕組みについては別のページで解説しています。
結論
辞書を空にする
d = {}
または
d.clear()
辞書が空か、要素が含まれているか判定 any()
d = {}
print(any(d))
# False
d = {1:'foo'}
print(any(d))
# True
実行環境
Python 3.9.2
辞書を空にする方法
変数に {} を割り当てる
Pythonの辞書(dict)に要素が1つも含まれていない状態(空)にする一般的な方法は、辞書を初期化するときと同じく{}
を割り当てることです。
d = {1:'foo', 2:'bar', 3:'baz'}
print(d)
# {1: 'foo', 2: 'bar', 3: 'baz'}
d = {}
print(d)
# {}
これで辞書 d
には空の辞書オブジェクトが割り当てられます。コードの理解が容易で、多くのケースではこの方法で十分です。
より正確に理解する上で、上記のように初期化しただけでは、元の辞書インスタンス(辞書の各要素)が削除されたわけではないことに注意しましょう。この方法では、新しい辞書インスタンスが生成されて、それがd
に割り当てられただけです。
辞書インスタンスの要素を消去するには次のdict.clear()
メソッドを使用します。
dict.clear()を使用する
元の辞書インスタンスの中身を消去するには dict.clear()
メソッドを使用します。
例えば、辞書 d
のすべての要素を削除したいときは次のようにします。
d = {1:'foo', 2:'bar', 3:'baz'}
d.clear()
print(d)
# {}
単に変数に{}
を代入して初期化する方法との違いはなんでしょうか?
例えば、次のような辞書d1
を生成し、それをd2
に代入するときを考えます。このとき、d2
にd1
の内容がコピーされて新しい辞書インスタンスが生成されるのではなく、d2
はd1
のインスタンスを参照しているだけです。
d1 = {1:'foo', 2:'bar', 3:'baz'}
d2 = d1
print(d1)
# {1: 'foo', 2: 'bar', 3: 'baz'}
print(d2)
# {1: 'foo', 2: 'bar', 3: 'baz'}
ここで、d1
の要素をdict.clear()
で消去するとd2
も空になります。
d1.clear()
print(d1)
# {}
print(d2)
# {}
同じ辞書インスタンスを複数の変数名から参照するコードなどではdict.clear()
とdict = {}
を使い分ける必要があるでしょう。
辞書が空か、要素が含まれているか判定する
Pythonの辞書(dict)に要素が含まれていない(空)であることを判断するのに一般的なのはlen()
を用いる方法です。
d = {1:'foo', 2:'bar'}
print(len(d))
# 2
d = {}
print(len(d))
# 0
長さが0であれば辞書が空であると判断できます。
また、同じく組み込み関数の any()
を利用する方法もあります。
辞書に要素が含まれている場合はTrue
、空の場合はFalse
が返されます。
d = {}
print(any(d))
# False
d = {1:'foo'}
print(any(d))
# True
d = {1:None}
print(any(d))
# True
any()
の使用コード例
d = {}
if any(d):
print("空ではない")
else:
print("空である")
# 空である
Pythonの学習法について
Python の勉強が辛くなっていませんか?
Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。
ゼロから独学で勉強するのは厳しい道のりです。
今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。
できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。
今回参考にしたページ・資料
ミュータブルなシーケンス型組み込み型 — Python 3.10.0b2 ドキュメント
any() 組み込み関数 — Python 3.10.0b2 ドキュメント