2
votes

découvrir combien de listes se trouvent dans une valeur

for key in my_dict.values():
   print(len(key))

2 commentaires

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 :-)


3 Réponses :


1
votes

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')


5 commentaires

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.



1
votes

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.


0 commentaires

0
votes

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 :-)


0 commentaires