def reduce_average_network_link(network, new_network_path, goal): network = Network(network).get_network() new_network = copy.copy(network) for key, neighbors in network.items(): if len(neighbors) > goal: new_neighbors = sorted(neighbors, key=lambda e: random.random()) new_neighbors = new_neighbors[0:goal] diff = set(neighbors) - set(new_neighbors) for d in diff: if len(new_network[d]) == 1: # if this is the only link, don't do anything new_neighbors.append(d) else: print "remove key(%d) from n(%s)" % (key, new_network[d]) new_network[d].remove(key) print "removed key(%d) from n(%s)" % (key, new_network[d]) new_network[key] = new_neighbors print new_network #new_network = Network.make_symmetric_network(self, new_network) n2 = Network(new_network) n2.write(new_network_path) n2.dot_gen(new_network_path + ".dot")