Because it will try to find the value of an attribute (page context first, then request, then session, then servlet context) called Akon, and use that value as the index / key.
That's why the first example works the other way around - the map doesn't have a key "Genre", but there is an attribute called "Genre" with a value that is a valid key.
Yes. The main thing to remember - with the bracket notation, anything not in quotes is either a numeric literal (e.g. [0]), boolean literal (e.g. [true]), null or the name of an attribute.