Python(プログラム)の勉強とアルゴリズムの勉強で幅優先探索を実装しようとしましたが・・・その前に辞書の使い方を勉強しようと思い今回この記事を作成しました。
※超初心者です・・・
今回は1つのリストから色々な条件で辞書を作成します。
↓が今回辞書を作成するリストです。
今回はリストの先頭要素がインデックスになっていて、その後の4個の要素がNodeを表していることを想定してsampleのリストを作成しました。
#辞書を作成する
sample = [[1,11,22,33,44],[2,21,22,23,24],[3,21,32,33,34],[4,41,42,43,44],[5,44,52,53,54]]
リストの先頭をキー、残りを値として辞書を作成しました。
d = {}
for line in sample:
d[line[0]] = line[1:5]
print(d)
#{1: [11, 22, 33, 44], 2: [21, 22, 23, 24], 3: [21, 32, 33, 34], 4: [41, 42, 43, 44], 5: [44, 52, 53, 54]}
次はリストの2個目以降をkeyとしてkeyが存在する場合はそのkeyに値を追加し、keyが存在しなければ新しいkeyを作成して辞書に追加するということをやってみました。
d = {}
for line in sample:
for i in line[1:5]:
value = line[1:5]
d.setdefault(i, []).extend(value)
print(d)
#{11: [11, 22, 33, 44],
# 22: [11, 22, 33, 44, 21, 22, 23, 24],
# 33: [11, 22, 33, 44, 21, 32, 33, 34],
# 44: [11, 22, 33, 44, 41, 42, 43, 44, 44, 52, 53, 54],
# 21: [21, 22, 23, 24, 21, 32, 33, 34],
# 23: [21, 22, 23, 24],
# 24: [21, 22, 23, 24],
# 32: [21, 32, 33, 34],
# 34: [21, 32, 33, 34],
# 41: [41, 42, 43, 44],
# 42: [41, 42, 43, 44],
# 43: [41, 42, 43, 44],
# 52: [44, 52, 53, 54],
# 53: [44, 52, 53, 54],
# 54: [44, 52, 53, 54]}
dict.setdefaultは
dict.setdefault(key,keyが存在しない時の処理)を定義できるようで、
今回はkeyがなければ空のリストを作成するという処理にしました。そのリストにextend()で要素を追加してみました。
この辞書のvalueは重複要素が存在し、またキーの値が含まれているので、重複要素の削除とキーの値の削除を行います。
for key, value in d.items():
value = set(value)
value.remove(key)
d[key] = value
print(d)
#{11: {22, 33, 44},
# 21: {22, 23, 24, 32, 33, 34},
# 22: {11, 21, 23, 24, 33, 44},
# 23: {21, 22, 24},
# 24: {21, 22, 23},
# 32: {21, 33, 34},
# 33: {11, 21, 22, 32, 34, 44},
# 34: {21, 32, 33},
# 41: {42, 43, 44},
# 42: {41, 43, 44},
# 43: {41, 42, 44},
# 44: {11, 22, 33, 41, 42, 43, 52, 53, 54},
# 52: {44, 53, 54},
# 53: {44, 52, 54},
# 54: {44, 52, 53}}
色々な条件で辞書作成をしようと思いましたが、今回は以上です。最後に作った辞書があればNodeとそのつながりが分かるので、幅優先探索の実装ができそうです。