繁体   English   中英

Python,计算重复名称

[英]Python, counting repeated name

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())

这部分代码将具有name_list值的alist转换为一个列表,其中每个 name 和 lastname 是列表中的单独值。 这个名字和姓氏分开的列表称为split 当我此时检查代码时,它可以工作,它会打印split并将所有名称和姓氏分开。

问题是以下代码没有正确计算重复名称或姓氏,函数仍然运行,但名称和姓氏出现在列表split中的次数不正确。

问题出在这部分代码中:

dicti = {}
    for word in split:
        if word in dicti:
            dicti[word] +=1
        else:
            dicti[word] = 0

帮助

计数减 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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM