'list' object has no attribute 'keys'
Python
Erreur courante
Explication
L'erreur `AttributeError: 'list' object has no attribute 'keys'` survient quand vous appelez `.keys()` (une méthode de **dictionnaire**) sur une **liste**. La variable est une liste, pas un dictionnaire — souvent parce qu'un JSON a été analysé en **tableau** (`[...]`) et non en objet (`{...}`).
```python
data = [{"id": 1}, {"id": 2}] # une liste de dictionnaires
for cle in data.keys(): # .keys() n'existe pas sur une liste
print(cle)
# AttributeError: 'list' object has no attribute 'keys'
```
Causes courantes
- **La variable est une liste**, pas un dictionnaire. - **JSON analysé en tableau** : `json.loads("[...]")` renvoie une `list`. - **Confusion** entre une liste de dictionnaires et un dictionnaire. - **Retour de fonction** d'un type inattendu.
1. Parcourez directement la liste
for element in data: # ✅ chaque élément est un dict
print(element["id"])
2. Accédez aux clés de chaque élément
for element in data:
for cle in element.keys(): # .keys() sur le dict, pas la liste
print(cle)
3. Vérifiez le type réel des données
print(type(data)) # <class 'list'> ou <class 'dict'> ?
4. Si vous attendiez un dictionnaire, corrigez la source
Un JSON qui commence par [ est un tableau ; par {, un objet. Adaptez votre code à la structure réellement reçue.
Comment prevenir cette erreur
- **Inspectez la structure** des données externes (`type(...)`, `print(...)`) avant de la manipuler.
- **Distinguez** liste de dictionnaires (`[{...}, {...}]`) et dictionnaire (`{...}`).
- **Validez le JSON d'API** avec un schéma (`pydantic`) si la structure doit être garantie.
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Comment savoir si mon JSON est une liste ou un dictionnaire ?
Regardez le premier caractère : `[` = liste (tableau), `{` = dictionnaire (objet). En Python, `type(data)` confirme : `list` ou `dict`.
J'ai une liste de dictionnaires, comment obtenir toutes les clés ?
Parcourez la liste puis appelez `.keys()` sur chaque élément : `for item in data: print(item.keys())`. Les clés appartiennent aux dictionnaires, pas à la liste qui les contient.