'Add multiple nodes.
Parameters
nodes : iterable container
A container of nodes (list, dict, set, etc.).
OR
A container of (node, attribute dict) tuples.
Node attributes are updated using the attribute dict.
attr : keyword arguments, optional (default= no attributes)
Update attributes for all nodes in nodes.
Node attributes specified in nodes as a tuple take
precedence over attributes specified via keyword arguments.
See Also
add_node
Examples
>>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_nodes_from(\'Hello\')
>>> K3 = nx.Graph([(0, 1), (1, 2), (2, 0)])
>>> G.add_nodes_from(K3)
>>> sorted(G.nodes(), key=str)
[0, 1, 2, \'H\', \'e\', \'l\', \'o\']
Use keywords to update specific node attributes for every node.
>>> G.add_nodes_from([1, 2], size=10)
>>> G.add_nodes_from([3, 4], weight=0.4)
Use (node, attrdict) tuples to update attributes for specific
nodes.
>>> G.add_nodes_from([(1, dict(size=11)), (2, {\'color\':\'blue\'})])
>>> G.node[1][\'size\']
11
>>> H = nx.Graph()
>>> H.add_nodes_from(G.nodes(data=True))
>>> H.node[1][\'size\']
11'

def add_nodes_from(self, nodes, **attr):

    for n in nodes:
        try:
            if (n not in self._succ):
                self._succ[n] = self.adjlist_inner_dict_factory()
                self._pred[n] = self.adjlist_inner_dict_factory()
                self._node[n] = attr.copy()
            else:
                self._node[n].update(attr)
        except TypeError:
            (nn, ndict) = n
            if (nn not in self._succ):
                self._succ[nn] = self.adjlist_inner_dict_factory()
                self._pred[nn] = self.adjlist_inner_dict_factory()
                newdict = attr.copy()
                newdict.update(ndict)
                self._node[nn] = newdict
            else:
                olddict = self._node[nn]
                olddict.update(attr)
                olddict.update(ndict)
