2016-03-25 38 views
0

Bu kodu hazırladım, sorunun satır 30'da olduğuna inanıyorum (32), sözlüğü hakkında aşağıdaki hatayı alıyorum "RuntimeError: yineleme sırasında sözlük değiştirildi" Kaybettim. google araması ve yığın taşmasıyla ilgili bir bakış, bazı örneklere ve benzer sorunlara sahipti, ancak bunu anlayamıyorum, yardımlarınız için teşekkürler.Python runtime hatası sözlüğü

import sys 
from collections import defaultdict 
from bisect import insort 

graph = defaultdict(list) 
edges = [] 
with open("blu.txt") as f: 
    for line in f: 
     (key, val) = line.split() 
     graph[key].append(val) 
     graph[val].append(key) 
     edges.append((key, val)) 

k = 3 
change = True 
while change: 
    change = False 
    for edge in edges: 
     inter = set(graph[edge[0]]).intersection(graph[edge[1]]) 
     if len(inter) < (k - 2): 
      if edge[1] in graph[edge[0]]: 
       graph[edge[0]].remove(edge[1]) 
       change = True 
      if edge[0] in graph[edge[1]]: 
       graph[edge[1]].remove(edge[0]) 
       change = True 

g = dict((key, value) for key, value in graph.items() if value) 
for key, v in g.items(): 
    for k, value in g.items(): 
     if key in value: 
      g.pop(key, None) 

for key, value in g.items(): 
    a = [] 
    insort(a, key) 
    for v in value: 
     insort(a, v) 
    print (tuple(a)) 


# for x in graph: 
# print (x, graph[x]) 


# def generate_edges(graph): 
#  edges = [] 
#  for k in graph: 
#   for neighbour in graph[k]: 
#    edges.append((k, neighbour)) 
#  return edges 


# print(generate_edges(graph)) 

cevap

0

Sen üzerinde yineleme ve aynı zamanda bir sözlük mutasyona edemez, aşağıya bakın: Her şeyden

for key, v in g.items(): 
    for k, value in g.items(): 
     if key in value: 
      g.pop(key, None) # You can't do this in a loop. What are you trying to accomplish in the end? 

Öncelikle, hiçbir neden yokken, iki kez döngü ediyoruz. Ve sonra g üzerinde yineleme yaparken patlıyorsunuz. Bize daha fazla detay ile örnek bir girdi ve çıktı verebilir misiniz?

0

bu hat - g.pop (anahtar, Yok) Sen yerine tuşları = g.keys() değerler = g.values ​​gibi bir şey kullanmak yasaktır döngü için sözlüğünü düzenlerken() sonra bunun yerine

aracılığıyla yineleyin