Это возможно, используя следующий код - словари с Python 3.7 (Python 3.6 для CPython) упорядочены путем вставки, поэтому мы начинаем с первого ключа из d
и выполняйте итерацию, обновляя следующий ключ для проверки, используя значение из последнего ключа, пока длина нашего нового словаря не станет такой же, как у нашего старого словаря.
Код:
d = {1: 3, 2: 4, 3: 5, 4: 1, 5: 2}
curr = list(d.keys())[0]
d_new = {}
while len(d) > len(d_new):
d_new[curr] = curr = d[curr]
Выход:
>>> d_new
{1: 3, 3: 5, 5: 2, 2: 4, 4: 1}
Ниже Python 3.7, вы можете использовать OrderedDict :
from collections import OrderedDict
d = {1: 3, 2: 4, 3: 5, 4: 1, 5: 2}
curr = 1
d_new = OrderedDict()
while len(d) > len(d_new):
d_new[curr] = curr = d[curr]
Согласно комментариям ниже, если ключ / значения содержат al oop, мы хотим перейти к следующей паре ключ-значение. Это может быть достигнуто следующим образом:
Код:
d = {1: 3, 2: 4, 3: 1, 4: 1, 5: 2}
curr = list(d.keys())[0]
d_new = {}
while len(d) > len(d_new):
if curr not in d_new:
d_new[curr] = curr = d[curr]
else:
curr = next(x for x in d.keys() if x not in d_new)
Выход:
>>> d_new
{1: 3, 3: 1, 2: 4, 4: 1, 5: 2}