次のようなリストがあるとしますが、深さと複雑さは異なる場合があります。
inc = {'root': 10,
'values': {
'left': {8: {
'left': {
6: {
'left': 5,
'right': 11}
},
'right': {
10: {
'left': 2,
'right': 11}
}}},
'right' : {
12: {
'left': 5,
'right': 20}
}}}
私がする必要があるのは、それをトラバースし、左の最小値と左端の値 (つまり、辞書の「左」要素にアクセスすることによって到達する値) を見つけて、それらを交換することです。辞書を再帰的に走査して値を見つけることは問題ではありません。問題は、何を変更する必要があるかを判断した後で、必要な値を見つけることです。
反復に使用される関数:
leftmost = 0
lowest = 0
def walk_dict(d):
global leftmost, lowest
for k,v in sorted(d.items()):
if isinstance(v, dict):
walk_dict(v)
else:
if k == 'left':
if leftmost == 0:
leftmost = v
if v < lowest:
lowest = v