J'effectue 100 appels d'API sur 100 villes différentes et lorsqu'il est appelé, il est généralement disponible sous la forme: Cependant, dans ["Données"] ['IAQI]] manque d'un de CO, NO2, O3, etc ... tout en boucle à travers 100 villes et effectuant des appels d'API, je veux vérifier si chacun d'entre eux est présent et ajoute "NA" s'il n'est pas présent. P> Je fais essayer et sauf comme ceci: p> Cela fonctionne parfaitement bien mais ne semble pas efficace, je me demande s'il y a un moyen plus propre de le faire. Merci! P> p>
3 Réponses :
Au lieu de garder vos polluants comme des listes séparées, gardez un dictionnaire comme ceci: Si vous vous assurez que vos touches correspondent à ce que vous attendez de l'API que vous pouvez maintenant faire cela: < / p> mais votre chemin est parfaitement bien pour être honnête. p> p>
Oh Haha Yup mais je veux le rendre plus propre. Merci pour l'aide! Cela semble beaucoup plus propre.
La première ligne peut également être remplacée par poluants = defaultDict (liste) code>
Vous pouvez utiliser obtenir la méthode code> à la place
Par exemple:
Choisir de meilleures structures de données peut rendre la place meilleure Je vais même aller plus loin et le refacteur comme ceci: p> from collections import defaultdict, namedtuple
cities = defaultdict(dict)
data_points = ['aqi', "co", "no2", "o3", "pm25"]
defaults = ['na', 'na', 'na', 'na', 'na']
AQI = namedtuple('AQI', field_names=data_points, defaults=defaults)
def get_data(city):
url = f'https://api.waqi.info/feed/{city}/?token={api_key}'
response = requests.get(url).json()
if response["status"] == "ok":
return response
def parse_json(data):
raw_data = {key:value['v'] for key, value in data["iaqi"].items() if key in data_points[1:]}
raw_data['aqi'] = data["aqi"]
return AQI(**raw_data)
for city in canadian_cities:
data = get_data(city)
if data and isinstance(data["data"]["aqi"], int):
cities[city] = parse_json(data=data["data"])
print(cities)