Python 3.3, un dictionnaire avec des paires clé-valeur sous cette forme.
d = {'T1': ['eggs', 'bacon', 'sausage']}
Les valeurs sont des listes de longueur variable, et je dois parcourir les éléments de la liste. Cela marche:
count = 0
for l in d.values():
for i in l: count += 1
Mais c'est moche. Il doit y avoir une façon plus pythonique, mais je n'arrive pas à le trouver.
len(d.values())
produit 1. C'est 1 liste (DUH). Les tentatives avec Counter from here donnent des erreurs de type 'inshashable'
Utilisez sum()
et les longueurs de chacune des valeurs du dictionnaire:
count = sum(len(v) for v in d.itervalues())
Si vous utilisez Python 3, utilisez simplement d.values()
.
Démo rapide avec votre échantillon d’entrée et l’un des miens:
>>> d = {'T1': ['eggs', 'bacon', 'sausage']}
>>> sum(len(v) for v in d.itervalues())
3
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(len(v) for v in d.itervalues())
7
Counter
ne vous aidera pas beaucoup ici, vous ne créez pas de compte par entrée, vous calculez la longueur totale de toutes vos valeurs.
>>> d = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['spam', 'ham', 'monty', 'python']}
>>> sum(map(len, d.values()))
7
Je faisais mes devoirs dans Treehouse. Cela peut être simplifié au moins une étape (à ma connaissance), mais il serait peut-être plus facile pour les débutants (comme moi) de comprendre cette version.
dict = {'T1': ['eggs', 'bacon', 'sausage'], 'T2': ['bread', 'butter', 'tosti']}
total = 0
for value in dict:
value_list = dict[value]
count = len(value_list)
total += count
print(total)
Je cherchais une réponse à cette question lorsque j'ai découvert ce sujet jusqu'à ce que je réalise que j'avais déjà quelque chose dans mon code pour l'utiliser. Voici ce que je suis venu avec:
count = 0
for key, values in dictionary.items():
count = len(values)
Si vous souhaitez enregistrer le nombre pour chaque élément du dictionnaire, vous pouvez créer un nouveau dictionnaire pour enregistrer le nombre pour chaque clé.
count = {}
for key, values in dictionary.items():
count[key] = len(values)
Je ne pouvais pas trouver exactement à partir de quelle version cette méthode est disponible, mais je pense que la méthode .items est uniquement disponible dans Python 3.