Если вы хотите удалить только несколько атрибутов в каком-то списке, скажите att_list
for n1, n2, d in graph.edges(data=True):
for att in att_list:
d.pop(att, None)
Или вы можете заменить последнюю строку на if att in d: del d[att]
, если вас беспокоит, что pop
возвращает что-то, что вы не используете. Улучшение по сравнению с вашим кодом заключается в том, что при data=True
я получаю d
сразу, а не при ссылке на graph[n1][n1]
позже.
См. Безопасное удаление нескольких ключей из словаря , чтобы узнать, как удалить несколько ключей из словаря (что и есть d
). По сути это то, что ваша проблема сводится к тому, как только вы получите d
.
В качестве альтернативы, если вы хотите очистить все атрибуты, обратите внимание, что если мы установим data=True
, то graph.edges
также возвращает словарь с атрибутами. Очистить этот словарь.
for (n1, n2, d) in graph.edges(data=True):
d.clear()
Вот полный пример
import networkx as nx
G=nx.Graph()
G.add_edge(1,2,weight=2)
G.edge[1][2]
> {'weight': 5}
for (n1, n2, d) in G.edges(data=True):
d.clear()
G.edge[1][2]
> {}
#just to check the edge in the opposite order
G.edge[2][1]
> {}