Вы изменяете не словарь, а переменную value
.Кроме того, вы не хотите искать равенство ключей и значений, вы хотите проверить, является ли ваш ключ in
вашим установленным значением.Затем удалите его из своего набора через set.remove
.Таким образом, вы можете использовать:
for key, value in G.items():
if key in value:
G[key].remove(key)
print(G)
{'y': {'z'}, 'z': {'u', 'y', 'f'}, 'u': {'z'}}
В качестве альтернативы вы можете использовать set.discard
, что не дает KeyError
, если значение не существует в вашем наборе.Следовательно, условие if
может быть опущено.
for key, value in G.items():
G[key].discard(key)
Наконец, рассмотрим приведенное ниже словарное понимание, которое создает словарь new и присваивает его G
.Это не является по сути неэффективным: временная сложность будет такой же, как и вышеописанные методы.Эта версия использует set.difference
, здесь через его синтаксический сахар -
:
G = {k: v - {k} for k, v in G.items()}
Согласно комментарию @JonClements, однострочная версия, которая содержит ссылки на G
возможно через dict.update
:
G.update({k: v - {k} for k, v in G.items()})