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
中的名称/姓氏,而键的值是名称或姓氏在该列表中重复的次数。
def name_counts(alist):
split = []
for listitem in alist:
split.extend(listitem.split())
这部分代码将值alist
的{{1}}转换为一个列表,其中每个名称和姓氏都是列表中的单独值。名称和姓氏分开的列表称为name_list
。当我此时检查代码时,它可以工作,它将打印split
,并且所有名称和姓氏都将分隔开。
问题是以下代码无法正确计算重复的名称或姓氏,功能仍然运行,但是名称和姓氏出现在列表split
中的次数不正确。问题出在这部分代码中:
split
半个
答案 0 :(得分:3)
计数减少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)
为您提供一组唯一名称,然后您可以在其上重复进行计数。
实际上,Python的标准库中还有一个现成的计数字典,称为Counter
:
import collections
def name_counts(alist):
return collections.Counter(name for listitem in alist for name in listitem.split())