Подсчитайте количество слов в словаре из списка - PullRequest
0 голосов
/ 20 ноября 2018

Имеется список:

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

и словарь

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

, если строка из списка уже существует в dictобновить значение, иначе добавить новый ключ и его подсчет.

результат:

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

Я пытался:

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

Не знаюне знаю, как продолжить

Ответы [ 4 ]

0 голосов
/ 20 ноября 2018

Перед расширением в строке 2 есть опечатка, которая должна быть для строки в списке .

Это мое предлагаемое решение.Выполняя итерацию по списку, проверяйте каждую запись, чтобы увидеть, является ли она ключом в словаре (как вы уже сделали).Если это так, dict [строка] будет числовым значением в паре с этим ключом, и вы можете добавить его к нему.Если нет, то вы можете добавить строку в качестве нового ключа со значением 1.

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

# iterate through lst and add 1 to each corresponding key value
for string in lst:
    if string in dict.keys():
        #  increment count for a found key 
        #  which can be accessed in dict[string] - no need for num
        count = int(dict[string])
        dict[string] = count + 1
    else:
        # add new key and a count of 1 to dict
        dict[string] = 1
0 голосов
/ 20 ноября 2018

Это легко сделать с помощью простого зацикливания списка и метода dict.get, хотя существует и другой эффективный метод.

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}
0 голосов
/ 20 ноября 2018

Ваш ответ был почти верным:

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

Предполагается, что строка, которую вы еще не видели, начинается со значения 1, что, похоже, соответствует вашему выводу.

Вы также можете удалить .keys (), так как python автоматически проверит ключи для значений, по которым вы циклически работаете, следовательно:

for string in lst:
    if string in dict:
        dict[string] += 1
    else:
        dict[string] = 1
0 голосов
/ 20 ноября 2018

Вы можете использовать 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...