Python3.8.5での標準ライブラリのimportについて。
a = "ajajijiaaiijajii" #aとjとiが不規則に並んだ文字列
b1 = {} #①用の空のライブラリー
b2 = {} #②用の空のライブラリー
#①for文でaを辞書化する
for c in a: #aを1つずつcに入れる
if c not in b1: #もしb1にcという名前のキーがなかったら以下のスクリプトを実行
b1[c] = 0 #b1のcキーに0を代入する
b1[c] += 1 #b1のcキーの現在のバリューに1をプラスする
print(b1) #{'a': 5, 'j': 5, 'i': 6}
#②setdefault関数でaを辞書化する
for c in a:
b2.setdefault(c, 0) #b2にcという名前のキーがなければそのキーのバリューに0を代入する
b2[c] += 1 #①と同じ処理
print(b2) #{'a': 5, 'j': 5, 'i': 6}
#③defaultdictをimportしてaを辞書化(?)する
from collections import defaultdict #collectionsモジュールのdefaultdictをimport
b3 = defaultdict(int) #原理は不明だが新しいキーのバリューに0が入るらしい
for c in a:
b3[c] += 1 #①や②と同じ処理
print(b3) #defaultdict(<class 'int'>, {'a': 5, 'j': 5, 'i': 6})
b1 = {} #①用の空のライブラリー
b2 = {} #②用の空のライブラリー
#①for文でaを辞書化する
for c in a: #aを1つずつcに入れる
if c not in b1: #もしb1にcという名前のキーがなかったら以下のスクリプトを実行
b1[c] = 0 #b1のcキーに0を代入する
b1[c] += 1 #b1のcキーの現在のバリューに1をプラスする
print(b1) #{'a': 5, 'j': 5, 'i': 6}
#②setdefault関数でaを辞書化する
for c in a:
b2.setdefault(c, 0) #b2にcという名前のキーがなければそのキーのバリューに0を代入する
b2[c] += 1 #①と同じ処理
print(b2) #{'a': 5, 'j': 5, 'i': 6}
#③defaultdictをimportしてaを辞書化(?)する
from collections import defaultdict #collectionsモジュールのdefaultdictをimport
b3 = defaultdict(int) #原理は不明だが新しいキーのバリューに0が入るらしい
for c in a:
b3[c] += 1 #①や②と同じ処理
print(b3) #defaultdict(<class 'int'>, {'a': 5, 'j': 5, 'i': 6})
標準ライブラリとは、Pythonが事前に用意してくれているライブラリのことです。
ライブラリは複数のパッケージを集めたものの名称なので、標準ライブラリの中にはモジュールがたくさん入っています。
これらのモジュールを使うには、いちいちそれを当該モジュールにimportしなければいけません。
上記の①と②のスクリプトでは、変数aの中にある不規則に並んだaとjとiを、空のディクショナリーにそれぞれキーとバリューという形で整理して代入しようとしています。
これと同じような処理を標準ライブラリからcollectionsモジュールのdefaultdictをimportしておこなったのが③です。
標準ライブラリを使うには、このようにしていちいち目的のモジュールだか関数だかを当該のモジュールにimportする必要があります。
ちなみに②で使っているsetdefault関数は、辞書型の変数に存在しないキーがあった場合に、新しくキーとバリューを登録するための関数です。
setdefault関数の定形は以下のとおりです。
辞書型の変数名.setdefault(キー名, バリュー名)
②では空の辞書型であるb2に対して b2.setdefault(c, 0) としていますので、現在のb2にcという名前のキーが存在しないときは、そのキーに0というバリューを付けてキーとバリューをb2に追加で登録する、という感じの処理になっています。
以上です。