human
Complete this python program:
def dijkstra_path(G, source, target, weight='weight'):
assistant
#Here is the Python program you requested.

    """Returns the shortest weighted path from source to target in G.
    Uses Dijkstra\s Method to compute the shortest weighted path
    between two nodes in a graph.
    Parameters
    G : NetworkX graph
    source : node
    Starting node
    target : node
    Ending node
    weight : string or function
    If this is a string, then edge weights will be accessed via the
    edge attribute with this key (that is, the weight of the edge
    joining `u` to `v` will be ``G.edge[u][v][weight]``). If no
    such edge attribute exists, the weight of the edge is assumed to
    be one.
    If this is a function, the weight of an edge is the value
    returned by the function. The function must accept exactly three
    positional arguments: the two endpoints of an edge and the
    dictionary of edge attributes for that edge. The function must
    return a number.
    Returns
    path : list
    List of nodes in a shortest path.
    Raises
    NetworkXNoPath
    If no path exists between source and target.
    Examples
    >>> G=nx.path_graph(5)
    >>> print(nx.dijkstra_path(G,0,4))
    [0, 1, 2, 3, 4]
    Notes
    Edge weight attributes must be numerical.
    Distances are calculated as sums of weighted edges traversed.
    The weight function can be used to hide edges by returning None.
    So ``weight = lambda u, v, d: 1 if d[\color\]=="red" else None``
    will find the shortest red path.
    The weight function can be used to include node weights.
    >>> def func(u, v, d):
    ...     node_u_wt = G.node[u].get(\node_weight\, 1)
    ...     node_v_wt = G.node[v].get(\node_weight\, 1)
    ...     edge_wt = d.get(\weight\, 1)
    ...     return node_u_wt/2 + node_v_wt/2 + edge_wt
    In this example we take the average of start and end node
    weights of an edge and add it to the weight of the edge.
    See Also
    bidirectional_dijkstra(), bellman_ford_path()
    """
    (length, path) = single_source_dijkstra(G, source, target=target, weight=weight)
    return path