J'ai essayé d'analyser json et d'utiliser la boucle for en Python. obj
est json et comme vous le savez, c'est comme le dictionnaire dans la liste dans le dictionnaire dans le dictionnaire ... et ainsi de suite.
Donc, j'analyse json et en fait une boucle for
comme ceci:
for a in all: if ['recommendSellerScore'] in all: recommendSellerScore.append(a['recommendSellerScore']) else: continue print('None')
Cependant, le problème est 'recommendSellerScore'
qui est la clé n'existe pas dans certaines listes.
Ce que je veux en conséquence, c'est imprimer 'None'
là où recommendSellerScore
n'existe pas, et imprimer les valeurs là où recommendSellerScore
existe.
for a in all: if a['recommendSellerScore'] in all: recommendSellerScore.append(a['recommendSellerScore']) else: continue print('None')
J'ai exécuté ce code ci-dessus, mais j'ai eu une erreur car 'recommendSellerScore'
n'existe pas.
all = obj['products'] for a in obj: recommendSellerScore.append(a['recommendSellerScore'])
Celui-ci a fonctionné, cependant, puisque 'recommendSellerScore'
existe dans la liste du dictionnaire, il n'était pas itérable. (Je suppose)
Veuillez corriger mon code, et tout commentaire ou conseil sera apprécié!
3 Réponses :
Voici la version corrigée de votre code (j'ai retiré l'instruction continue
et le []
autour de la chaîne):
for a in all: if "recommendSellerScore" in a: recommendSellerScore.append(a["recommendSellerScore"]) else: print("None")
N'utilisez pas "something" in a
car il pourrait ne pas fonctionner comme prévu si «quelque chose» est trouvé dans les valeurs. "something" in a.keys()
est beaucoup plus sûr et explicite.
@Guimoute vous vous trompez, "something" in a
est pareil avec "something" in a.keys()
c'est la meilleure réponse à ce jour;)
@kederrac Mon mal, je me suis mêlé à dictview
s. Encore une bonne idée de vérifier explicitement les clés ou les valeurs.
@Guimoute Merci pour vos conseils! Cela fonctionnait avec ".keys ()". Le code que j'utilise comme résultat est: for a in all: if "recommendSellerScore" dans a.keys (): recommendSellerScore.append (a ["recommendSellerScore"]) else: recommendSellerScore.append ("None")
@kederrac Je ne sais pas pourquoi, il me manque peut-être quelque chose dans l'explication, mais cela ne fonctionne qu'avec "quelque chose" dans a.keys (). En tout cas merci pour ton commentaire également! :)
Peut-être que quelque chose comme le code ci-dessous fonctionne pour vous?
for a in all: if a.get(['recommendSellerScore']) is not None: recommendSellerScore.append(a['recommendSellerScore']) else: print("None") # No need for continue here.
vous ne pouvez pas avoir de listes comme clé dans un dict, votre code doit TypeError: unhashable type: 'list'
vous ne pouvez pas non plus utiliser dict.get
avec une liste
L'OP a dit que le obj
est JSON -> donc traduit à un dictionnaire, après des charges de JSON
regardez votre premier commentaire que vous envisagez a
comme dict
Vous pouvez utiliser la méthode get
des dictionnaires pour essayer d'accéder à la valeur du dictionnaire, si la clé n'est pas présente, vous pouvez fournir une valeur par défaut, si vous n'en spécifiez pas une, elle affichera None
, par exemple:
>>> 1 >>> None
Edit: comme indiqué par @kederrac si vos données peuvent avoir {key: None}
valeurs {key: None}
et que vous souhaitez conserver ces valeurs None
, il est préférable de demander si la clé est vraiment présente dans le dictionnaire, par exemple:
key = 'recommendSellerScore' a = [{key: 1}, {key: None}] recommendSellerScore = [] for d in a: if key in d.keys(): print(d[key]) recommendSellerScore.append(d[key]) else: print('None')
Il imprimera:
key = 'recommendSellerScore' a = [{key: 1}, {}] recommendSellerScore = [] for d in a: score = d.get(key) if score is not None: print(score) recommendSellerScore.append(score) else: print('None')
et si a = [{key: None}, {}]
? votre code ne parviendra pas à stocker dans recommendSellerScore
la valeur None
@kederrac, true, dans ce cas, voir Edit
.
si vous avez a = [{key: 1}, {key: None}, {1:1}]
?
@hitter merci pour votre réponse. Puis-je savoir comment je peux voter pour les commentaires? Je ne vois qu'un drapeau sur les commentaires.