Étant donné une liste:

lst = ['apple', 'orange', 'pears', 'pears', 'banana']

Et un dictionnaire

dict = {'orange': 4, 'apple':2, 'pears': 1}

Si une chaîne de la liste existe déjà dans dict update, la valeur sinon ajoutez une nouvelle clé et son décompte.

Résultat:

dict = {'orange' = 5, 'apple':3, 'pears':3, 'banana':1}

J'ai essayé:

count = 0
for string on lst:
    if string in dict.keys():
        for num in dict:
            count = count + num
            num = count

Je ne sais pas comment continuer

0
Comp 20 nov. 2018 à 20:37

3 réponses

Meilleure réponse

Votre réponse était presque correcte:

for string in lst:
    if string in dict.keys():
        dict[string] += 1
    else:
        dict[string] = 1

Cela suppose qu'une chaîne que vous n'avez pas encore vue commence par une valeur de 1, ce qui semble être le cas compte tenu de votre sortie.

Vous pouvez également supprimer le .keys (), car python vérifiera automatiquement dans les clés les valeurs sur lesquelles vous bouclez, d'où:

for string in lst:
    if string in dict:
        dict[string] += 1
    else:
        dict[string] = 1
1
Luca Giorgi 20 nov. 2018 à 17:44

Cela peut facilement être fait avec un simple bouclage de liste et une méthode dict.get, bien qu'il existe une autre méthode efficace.

lst = ['apple', 'orange', 'pears', 'pears', 'banana']
dict = {'orange': 4, 'apple':2, 'pears': 1}

for st in lst:
     dict[st] = dict.get(st,0)+1

dict
{'orange': 5, 'apple': 3, 'pears': 3, 'banana': 1}
1
Rahul Chawla 20 nov. 2018 à 17:45

Vous pouvez utiliser collections.Counter

from collections import Counter

>>> lst = ['apple', 'orange', 'pears', 'pears', 'banana']
>>> d = {'orange': 4, 'apple':2, 'pears': 1}

>>> count = Counter(d)
>>> count
Counter({'orange': 4, 'apple': 2, 'pears': 1})
>>> count += Counter(lst)
>>> count
Counter({'orange': 5, 'pears': 3, 'apple': 3, 'banana': 1})
1
CoryKramer 20 nov. 2018 à 17:39