Удалить значение словаря, если значение является ключом в Python - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть словарь, и я хочу удалить каждое значение словаря, которое является ключом.Я хочу этот вывод: G = {'y': {'z'}, 'z': {'u', 'f', 'y'}, 'u': {'z'}}

G = {'y': {'z', 'y'}, 'z': {'z', 'u', 'f', 'y'}, 'u': {'u', 'z'}}

Я пробовал это, но я знаю.Это неправильно.

for key,value in G.items():
    if key == value:
        del value

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Вы изменяете не словарь, а переменную 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()})
0 голосов
/ 25 ноября 2018

Удалить ключ в значении, а не само значение.

for key, value in G.items():
    if key in value:
        value.remove(key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...