エントリ値がキーによって別のエントリを参照でき、最終的に現在の値のエントリがない場合、または「-」が検出された場合に終了する辞書があります。このデータ構造の目的は、各エントリの親を見つけ、「-」を「なし」に変換することです。たとえば、次のようにします。
d = {'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
- 「1」は「-」にマップされるルートであるため、結果は「なし」になります。
- 「0」の親は「6」で、親は「9」なので、結果は「9」になります。
- 「3」には「1」の親があり、これは「-」にマップされるため、結果は「なし」になります。
- 「2」には「3」の親があり、「1」の親は「-」にマップされるため、結果は「なし」になります。
- 「4」は「5」の親のままにする必要があります
- 「6」は「9」の親のままにする必要があります
私の冗長な解決策は次のとおりです。
d = {'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
print(d)
for dis, rep in d.items():
if rep == "-":
d[dis] = None
continue
while rep in d:
rep = d[rep]
if rep == "-":
d[dis] = None
break
else:
d[dis] = rep
print(d)
出力は次のとおりです。
{'1': '-', '0': '6', '3': '1', '2': '3', '4': '5', '6': '9'}
{'1': None, '0': '9', '3': None, '2': None, '4': '5', '6': '9'}
結果は正しいです。「1」要素には親がなく、「2」/「3」要素は「1」を指します。また、親がいないはずです。
Python 3+を使用してこれを達成するためのより簡潔なPythonの方法はありますか?