Итерация по самому словарю - это итерация по его ключам. Проверьте сами:
sample = {'a':1, 'b':2, 'c':3}
for i in sample:
print(i)
В выводе у нас будет:
a
b
c
В python также есть разложение:
x = [1, 2]
a, b = x
Соответственно, выполнение кода for i, j in friendships
ожидает, что единицы итерации будут разложены на i и j.
Это сработало бы, если, например, ключами в нашем словаре были кортежи (tuple)*:
z = {(1,2):'привет', (3,4):'ромашки'}
for i,j in z:
print(f"{i=}, {j=}")
Но в нашем словаре friendships
ключи - int
-ы. Итерация for i, j in friendships
на практике пытается сделать: i, j = 1
. Из-за чего и появляется TypeError: cannot unpack non-iterable int object
.
Таким образом вам надо понять, как правильно пройтись по вашим данным, чтобы разложить их так, как вы хотите.
У встроенных словарей есть несколько методов, дающий легкий доступ к разным итерациям: по ключам - .keys()
, по значениям - .values()
, по парам ключ-значение - .items()
.
Обратитесь к документации, посмотрите методы встроенных типов данных (list, str, dict, tuple, set и др.) - это обогатит ваше понимание того, как вы можете управлять объектами и что вы можете с ними делать.
* ключами словаря могут быть любые хешируемые объекты.