Как он может искать внутри словаря, если словарь пуст? - PullRequest
0 голосов
/ 23 января 2019

Я только начал изучать Python и нашел этот фрагмент. Он должен подсчитать, сколько раз слово появляется. Я думаю, для всех вас это будет казаться очень логичным, но, к сожалению, для меня это не имеет никакого смысла.

str = "house is where you live, you don't leave the house."
dict = {}
list = str.split(" ") 
for word in list:  # Loop over the list
    if word in dict:  # How can I loop over the dictionary if it's empty?
        dict[word] = dict[word] + 1
    else:
        dict[word] = 1

Итак, мой вопрос здесь, как я могу перебрать словарь? Разве словарь не должен быть пустым, потому что я ничего не пропустил внутрь? Может быть, я недостаточно умен, но не вижу логики. Кто-нибудь может объяснить мне, как это работает? Большое спасибо

1 Ответ

0 голосов
/ 23 января 2019

Как кто-то еще указал, термины str, dict и list не должны использоваться для имен переменных, потому что это настоящие команды Python, которые делают особые вещи в Python.Например, str(33) превращает число 33 в строку «33».Конечно, Python часто достаточно умен, чтобы понять, что вы хотите использовать эти вещи в качестве имен переменных, но чтобы избежать путаницы, вам действительно следует использовать что-то еще.Итак, вот тот же код с разными именами переменных, а также некоторые операторы print в конце цикла:

mystring = "house is where you live, you don't leave the house."
mydict = {}
mylist = mystring.split(" ") 
for word in mylist:  # Loop over the list
    if word in mydict:  
        mydict[word] = mydict[word] + 1
    else:
        mydict[word] = 1
    print("\nmydict is now:")
    print(mydict)

Если вы запустите это, вы получите следующий вывод:

mydict is now:
{'house': 1}

mydict is now:
{'house': 1, 'is': 1}

mydict is now:
{'house': 1, 'is': 1, 'where': 1}

mydict is now:
{'house': 1, 'is': 1, 'where': 1, 'you': 1}

mydict is now:
{'house': 1, 'is': 1, 'live,': 1, 'where': 1, 'you': 1}

mydict is now:
{'house': 1, 'is': 1, 'live,': 1, 'where': 1, 'you': 2}

mydict is now:
{"don't": 1, 'house': 1, 'is': 1, 'live,': 1, 'you': 2, 'where': 1}

mydict is now:
{"don't": 1, 'house': 1, 'is': 1, 'live,': 1, 'leave': 1, 'you': 2, 'where': 1}

mydict is now:
{"don't": 1, 'house': 1, 'is': 1, 'live,': 1, 'leave': 1, 'you': 2, 'where': 1, 'the': 1}

mydict is now:
{"don't": 1, 'house': 1, 'is': 1, 'live,': 1, 'house.': 1, 'leave': 1, 'you': 2, 'where': 1, 'the': 1}

Так что mydict действительно обновляется с каждым найденным словом.Это также должно дать вам лучшее представление о том, как работают словари в Python.

Чтобы было ясно, вы не «зацикливаетесь» на словаре.Команда for запускает цикл;Команда if word in mydict: - это не цикл, а просто сравнение.Он просматривает все ключи в mydict и определяет, совпадает ли строка с той же строкой, что и word.

Также обратите внимание, что, поскольку вы разделяете предложение только на строки, ваш список слов включает, например, "house" и "house.".Поскольку эти два слова не совсем совпадают, они рассматриваются как два разных слова, поэтому в вашем словаре вы видите 'house': 1 и 'house.': 1 вместо 'house': 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...