<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def attachment_probability(G):
 """ Calculates the observed attachment probability for each node at each time-step. Attachment probability is calculated based on the observed new edges in the next time-step. So if a node acquires new edges at time t, this will accrue to the node's attachment probability at time t-1. Thus at a given time, one can ask whether degree and attachment probability are related. Parameters G : :class:`.GraphCollection` Must be sliced by 'date'. See :func:`.GraphCollection.slice`\. Returns ------- probs : dict Keyed by index in G.graphs, and then by node. """

    warnings.warn("Removed in 0.8. Too domain-specific.")

    probs = {}
    G_ = None
    k_ = None
    for k,g in G.graphs.iteritems():
        new_edges = {}
        if G_ is not None: 
            for n in g.nodes():
                try:
                    old_neighbors = set(G_[n].keys())
                    if len(old_neighbors) > 0:
                        new_neighbors = set(g[n].keys()) - old_neighbors
                        new_edges[n] = float(len(new_neighbors))
                    else:
                        new_edges[n] = 0.
                except KeyError:
                    pass
    
            N = sum( new_edges.values() )
            probs[k_] = { n:0. for n in G_.nodes() }
            if N > 0.:
                for n in G.nodes():
                    try:
                        probs[k_][n] = new_edges[n]/N
                    except KeyError:
                        pass

            if probs[k_] is not None:
                networkx.set_node_attributes(G.graphs[k_],
                                             'attachment_probability',
                                             probs[k_])
    
        G_ = G
        k_ = k

    # Handle last graph (no values).
    key = G.graphs.keys()[-1]
    zprobs = { n:0. for n in G.graphs[key].nodes() }
    networkx.set_node_attributes(G.graphs[key], 'attachment_probability', zprobs)

    return probs