1
votes

Créer un dictionnaire dans une compréhension de dictionnaire

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 commentaires

Vous ne pouvez pas utiliser collections.Counter ou collections.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 des collections.Counter .


Vous pouvez utilisersetdefault() lors de l'incrémentation des valeurs dans le dictionnaire.


3 Réponses :


0
votes

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]


0 commentaires

0
votes

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}


0 commentaires

0
votes

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}


0 commentaires