J'ai une liste avec des valeurs répétées et je veux les compter en utilisant une compréhension de dictionnaire
Voici ma première tentative
number_list = [1,1,2,2,3,3,4,4,5,5] number_count_dict = {i:1 for i in number_list} {k: (number_count_dict[k]+1 if k in number_count_dict() else 1) for k in number_list}
Existe-t-il un moyen d'y parvenir sans initialiser le dictionnaire?
3 Réponses :
Prenez cet exemple pour votre question:
{0: 5, 1: 3, 2: 3, 3: 4, 4: 2}
et disons si vous souhaitez en faire un dictionnaire où la clé est l'index et la valeur est l'élément de la liste. Ensuite, vous pourriez trt quelque chose comme ça:
{index:numbers[index] for index in range(0,len(numbers))}
Voici le résultat:
numbers = [5,3,3,4,2]
Cela ne comptera que les répétitions (> 1)
>>> from collections import Counter >>> x=[1,1,2,2,3,3,4,4,5,5] >>> {i:j for i,j in Counter(x).items() if i>1} {2: 2, 3: 2, 4: 2, 5: 2}
Votre question laisse de côté quelques points importants. Quels sont les nombres minimum et maximum que vous voulez dans le dictionnaire? Voulez-vous que les nombres avec 0 soient comptés? Pouvez-vous utiliser la classe Counter?
# 1: Comptez les éléments de 0 à len (number_list), y compris les éléments avec un compte de 0, en utilisant Counter.
from collections import defaultdict number_list = [1,1,2,2,3,3,4,4,5,5] number_count_dict = defaultdict(int) for i in number_list: number_count_list[i] += 1
# 2: Comptez les éléments du plus petit au plus grand nombre dans la liste, y compris les éléments avec un compte de 0, à l'aide de Counter.
>>> number_list = [1,1,2,2,3,3,4,4,5,5] >>> number_count_dict = {i:number_list.count(i) for i in set(number_list)} {1: 2, 2: 2, 3: 2, 4: 2, 5: 2}
# 3: Comptez les éléments de la liste en utilisant Counter.
>>> number_list = [2,2,3,3,4,4,5,5,7,7] >>> number_count_dict = {i:number_list.count(i) for i in range(min(number_list),max(number_list)+1)} {2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 2}
# 4: Comptez les éléments de 0 à len (number_list), y compris les éléments avec un compte de 0, PAS en utilisant Counter.
>>> number_list = [1,1,2,2,3,3,4,4,5,5] >>> number_count_dict = {i:number_list.count(i) for i in range(len(number_list))} {0: 0, 1: 2, 2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 0, 8: 0, 9: 0}
# 5: Comptez les éléments du nombre le plus bas au nombre le plus élevé dans la liste, y compris les éléments avec un compte de 0, sans utiliser de compteur.
>>> from collections import Counter >>> number_list = [1,1,2,2,3,3,4,4,5,5] >>> count = Counter(number_list) >>> number_count_dict = {i:count[i] for i in set(number_list)} {1: 2, 2: 2, 3: 2, 4: 2, 5: 2}
# 6: Comptez les éléments de la liste sans utiliser de compteur.
>>> from collections import Counter >>> number_list = [2,2,3,3,4,4,5,5,7,7] >>> count = Counter(number_list) >>> number_count_dict = {i:(count[i] if i in number_list else 0) for i in range(min(number_list),max(number_list)+1)} {2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 2}
# 7: Bonus, en utilisant un defaultdict et une boucle for.
>>> from collections import Counter >>> number_list = [1,1,2,2,3,3,4,4,5,5] >>> count = Counter(number_list) >>> number_count_dict = {i:(count[i] if i in number_list else 0) for i in range(len(number_list))} {0: 0, 1: 2, 2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 0, 8: 0, 9: 0}
Vous ne pouvez pas utiliser
collections.Counter
oucollections.defaultdict
?{k:number_list.count(k) for k in number_list}
donnera la sortie souhaitée mais elle est inefficace. Et que se passe-t-il avec l'utilisation descollections.Counter
.Vous pouvez utiliser
setdefault()
lors de l'incrémentation des valeurs dans le dictionnaire.