Hash table stores key-value pairs but the key is generated through a hashing function.
In Python, the Dictionary data types represent the implementation of hash tables.
Any function that can be used to map data of arbitrary size to fixed-size values.
Hash functions and their associated hash tables are used in data storage and retrieval applications to access data in a small and nearly constant time per retrieval.
The term "hash table" is talking about the implementation: a specific way to organize your data in memory.
The term "associative array" is talking about the interface: the concept that you use objects as array indices. (This is sometimes called an abstract data structure.)
There are multiple ways to implement an associative array. A hash table is one of them -- in fact, it is by far the most common one.