Выполнение нескольких вызовов с помощью asyncio и добавление результата в словарь

У меня возникли проблемы с переносом в библиотеку Asyncio в Python 3. У меня есть список почтовых индексов, и я пытаюсь сделать асинхронные вызовы API, чтобы получить каждый почтовый индекс, соответствующий городу и штату. Я могу сделать это успешно в последовательности с циклом for, но я хочу сделать это быстрее в случае большого списка почтовых индексов.

Это пример моего оригинала, который работает

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']}

Это моя ужасная нефункциональная попытка сделать его асинхронным

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

Буду признателен за любую оказанную помощь. Все учебники, с которыми я сталкивался в Интернете, кажутся мне немного сложными.

Примечание: я видел несколько примеров использованияaiohttp, Я надеялся придерживаться нативных библиотек Python 3, если это возможно.

Ответы на вопрос(2)

Ваш ответ на вопрос