Hacer múltiples llamadas con asyncio y agregar resultados a un diccionario

Tengo problemas para ajustar mi ventaja alrededor de la biblioteca Asyncio de Python 3. Tengo una lista de códigos postales y estoy tratando de hacer llamadas asíncronas a una API para obtener cada código postal correspondiente de la ciudad y el estado. Puedo hacerlo con éxito en secuencia con un bucle for, pero quiero hacerlo más rápido en el caso de una gran lista de códigos postales.

Este es un ejemplo de mi original que funciona

import urllib.request, json

zips = ['90210', '60647']

def get_cities(zipcodes):
    zip_cities = dict()
    for idx, zipcode in enumerate(zipcodes):
        url = 'http://maps.googleapis.com/maps/api/geocode/json?address='+zipcode+'&sensor=true'
        response = urllib.request.urlopen(url)
        string = response.read().decode('utf-8')
        data = json.loads(string)
        city = data['results'][0]['address_components'][1]['long_name']
        state = data['results'][0]['address_components'][3]['long_name']
        zip_cities.update({idx: [zipcode, city, state]})
    return zip_cities

results = get_cities(zips)
print(results)
# returns {0: ['90210', 'Beverly Hills', 'California'],
#          1: ['60647', 'Chicago', 'Illinois']}

Este es mi terrible intento no funcional para tratar de hacerlo asíncrono

import asyncio
import urllib.request, json

zips = ['90210', '60647']
zip_cities = dict()

@asyncio.coroutine
def get_cities(zipcodes):
    url = 'http://maps.googleapis.com/maps/api/geocode/json?address='+zipcode+'&sensor=true'
    response = urllib.request.urlopen(url)
    string = response.read().decode('utf-8')
    data = json.loads(string)
    city = data['results'][0]['address_components'][1]['long_name']
    state = data['results'][0]['address_components'][3]['long_name']
    zip_cities.update({idx: [zipcode, city, state]})

loop = asyncio.get_event_loop()
loop.run_until_complete([get_cities(zip) for zip in zips])
loop.close()
print(zip_cities) # doesnt work

Cualquier ayuda es muy apreciada. Todos los tutoriales que he encontrado en línea parecen ser un poco sobre mi cabeza.

Nota: he visto algunos ejemplos usaraiohttp. Esperaba seguir con las bibliotecas nativas de Python 3 si es posible.

Respuestas a la pregunta(2)

Su respuesta a la pregunta