for key in my_dict.values(): print(len(key))
3 Réponses :
Une approche, bien qu'elle ne semble pas très pythonique, consiste simplement à parcourir les valeurs et, si une valeur est une liste, à tester chaque élément de la liste pour voir si il est un liste, en comptant celles qui sont:
fruits has 0 list countries has 4 lists colors has 2 lists
Impressions:
for key, value in my_dict.items():
count = 0
if isinstance(value, list):
for val in value:
if isinstance(val, list):
count += 1
print(f'{key} has {count} lists')
Cette solution suppose qu'une liste imbriquée ne contiendra que des listes. Ce qu'il échouera pour {foo: [bar, [baz], [qux]]}
@XeroSmith Vous avez raison! Mis à jour et fonctionne sur votre exemple. Cela pourrait probablement être rendu plus élégant, mais je pense que c'est illustratif.
vous avez mon avis positif, votre mise à jour est la réponse que j'aurais plus ou moins publiée. Je pense que les réponses illustratives sont meilleures que les réponses intelligentes, en particulier pour les débutants. Maintenant, si l'OP souhaite ajouter la liste externe, il peut simplement démarrer l'incrémentation du compteur lorsqu'il est rencontré avant de parcourir la liste. Et vous voudrez peut-être changer v en valeur dans if isinstance (v, list) afin qu'il corresponde à la valeur au début de l'itération du dictionnaire . Vous avez mon vote favorable
Liés .
@DYZ ooo, solution récursive pour les listes imbriquées. Très agréable.
Ma première question serait de savoir si vous pourriez aussi vouloir mettre la liste des fruits dans une autre liste. Ensuite, la structure est la même pour tous vos cas et la solution est simplement:
{'colors': 2, 'countries': 4, 'fruits': 1}
Sinon, si vous voulez vous en tenir à cette structure de données que vous avez publiée, vous pouvez faire:
{key: len(value) if isinstance(value[0], list) else 1 for key, value in my_dict.items()}
Cela entraînerait:
{key: len(value) for key, value in my_dict.items()}
Je dois admettre qu'il y a pas mal d'hypothèses dans cette solution. Si vous voulez trouver toutes les listes à n'importe quel endroit, cela compliquerait les choses.
Merci beaucoup, codingpoets, votre réponse était la plus appropriée
Merci également à toutes les autres personnes qui ont lu mon problème et ont essayé de m'aider :-)
Je crois qu'il y a 4 listes sous «Pays» (ou 5, si la liste externe est incluse). Précisez s'il vous plaît. Aussi, qu'avez-vous essayé?
Oui, tu as raison. C'était 4 dans le cas des pays. J'ai déjà ajouté quelques informations supplémentaires :-)