def name_counts(alist):
split = []
for listitem in alist:
split.extend(listitem.split())
dicti = {}
for word in split:
if word in dicti:
dicti[word] +=1
else:
dicti[word] = 0
print(split)
return dicti
name_list = ["David Joyner", "David Zuber", "Brenton Joyner",
"Brenton Zuber", "Nicol Barthel", "Shelba Barthel",
"Shelba Crowley", "Shelba Fernald", "Shelba Odle",
"Shelba Fry", "Maren Fry"]
print(name_counts(name_list))
该函数返回字典dicti
,其中关键是名字从关键的名单list
and值/姓氏是时代的名称,或在该列表姓氏重复的ammount的。
def name_counts(alist):
split = []
for listitem in alist:
split.extend(listitem.split())
这部分代码转换,其具有alist
的一个列表,其中每个名字和姓氏在列表中分隔值的值name_list
。这份名单与姓和名分开叫split
。当我在这一点上检查代码,它的工作原理,它打印split
和I T拥有所有分隔的名称和lastnames。
问题是,下面的代码犯规正确计算的重复名称或lastnames,功能仍然运行,但时代的名字和姓氏出现在列表中split
是不正确的金额。问题是,在这部分代码:
dicti = {}
for word in split:
if word in dicti:
dicti[word] +=1
else:
dicti[word] = 0
HALP
计数是关闭的1,因为第一次看到你的名字,你初始化这个名字的次数为0。如果你要保持当前的流量控制结构,你应该在这一点上,而不是初始化计数1 0。
但这里的避免引诱你进入那个错误更紧凑的版本:
def name_counts(alist):
split = [name for listitem in alist for name in listitem.split()]
return {name : split.count(name) for name in set(split)}
注意使用set(split)
的给你一套独特的名字,在这你再重复做计数。
而实际上,这里还有一个现成的-PEG计数字典,叫Counter
,在Python的标准库:
import collections
def name_counts(alist):
return collections.Counter(name for listitem in alist for name in listitem.split())