# 2.5.2.2.3. Dictionary of Keys Format (DOK)¶

• subclass of Python dict
• keys are (row, column) index tuples (no duplicate entries allowed)
• values are corresponding non-zero values
• efficient for constructing sparse matrices incrementally

• constructor accepts:
• dense matrix (array)
• sparse matrix
• shape tuple (create empty matrix)

• flexible slicing, changing sparsity structure is efficient

• can be efficiently converted to a coo_matrix once constructed

• slow arithmetics (for loops with dict.iteritems())

• use:
• when sparsity pattern is not known apriori or changes

## 2.5.2.2.3.1. Examples¶

• create a DOK matrix element by element:

```>>> mtx = sparse.dok_matrix((5, 5), dtype=np.float64)
>>> mtx
<5x5 sparse matrix of type '<... 'numpy.float64'>'
with 0 stored elements in Dictionary Of Keys format>
>>> for ir in range(5):
...     for ic in range(5):
...         mtx[ir, ic] = 1.0 * (ir != ic)
>>> mtx
<5x5 sparse matrix of type '<... 'numpy.float64'>'
with 20 stored elements in Dictionary Of Keys format>
>>> mtx.todense()
matrix([[ 0.,  1.,  1.,  1.,  1.],
[ 1.,  0.,  1.,  1.,  1.],
[ 1.,  1.,  0.,  1.,  1.],
[ 1.,  1.,  1.,  0.,  1.],
[ 1.,  1.,  1.,  1.,  0.]])
```
• slicing and indexing:

```>>> mtx[1, 1]
0.0
>>> mtx[1, 1:3]
<1x2 sparse matrix of type '<... 'numpy.float64'>'
with 1 stored elements in Dictionary Of Keys format>
>>> mtx[1, 1:3].todense()
matrix([[ 0.,  1.]])
>>> mtx[[2,1], 1:3].todense()
matrix([[ 1.,  0.],
[ 0.,  1.]])
```