I am writing a cypher and I've assigned numerical values to every letter in the alphabet, `alphabet_dictionary = {'a': 0, 'b': 1, 'c': 2,... etc.}`.

I first convert the letter in `message` to numbers, do some arithmetic and store those numbers in a variable named `code`.

I want to convert them back to letters.

So far I have:

```
for number in code:
    for letter, value in alphabet_dictionary.items():
        if value == number:
            coded_message.append(letter)

```

This works. I end up with a the correct coded message inside my `coded_message` list. Is there is something better or more efficient?

Why can't I do that in a single line? I first tried using:

```
for number in code:
    coded_message.append(letter for letter, value in alphabet_dictionary.items() if value == number)

```

but that only appends the memory allocation address for the individual characters for example: 

```
`[<generator object <genexpr> at 0x1011bb240>, <generator object <genexpr> at 0x1011bb1f8>, <generator object <genexpr> at 0x1011bb288>, <generator object <genexpr> at 0x1011bb2d0>, <generator object <genexpr> at 0x1011bb318>, <generator object <genexpr> at 0x1011bb360>, <generator object <genexpr> at 0x1011bb3a8>]'

```

Why is this happening?