如果字典为空,如何在字典中进行搜索?

时间:2019-01-23 18:05:15

标签: python python-3.x dictionary for-loop

我刚刚开始学习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 :(得分:-2)

正如其他人指出的那样,术语strdictlist不应用于变量名,因为它们是在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的原因。