A data structure that stores meta-data, i.e. data about data. The term "data dictionary" has several uses.
Most generally it is a set of data descriptions that can be shared by several applications.
Usually it means a table in a database that stores the names, field types, length, and other characteristics of the fields in the database tables.
An active data dictionary is automatically updated as changes occur in the database. A passive data dictionary must be manually updated.
In a DBMS, this functionality is performed by the system catalog. The data dictionary is a more general software utility used by designers, users, and administrators for information resource management.
The data dictionary may maintain information on system hardware, software, documentation, users, and other aspects.
Data dictionaries are also used to document the database design process itself and can accumulate meta-data ready to feed into the system catalog.
[Does anybody call them "codebooks"?]