【问题标题】:I need to create a dictionary that counts the number of times a name appears in a list我需要创建一个字典来计算名称出现在列表中的次数
【发布时间】:2018-04-18 01:06:20
【问题描述】:

到目前为止我有这个代码:

def name_counts(name_list):
    name_dict = {}
    for word in name_list:
        if word in name_dict:
            name_dict[word] += 1
        else:
            name_dict[word] = 1


print(name_counts(name_list))

导致:

但我需要它只打印名字,而不是最后一个。我该怎么做?我知道我应该使用 split 函数,但无论何时我做name_list.split() 它都会返回一个属性错误。

【问题讨论】:

  • Counter(list)
  • 将代码或数据作为图片发布是不好的。无法将图片复制并粘贴到代码编辑器中。因此,有人提供帮助将更加困难,因此不太可能。为了充分利用该站点,ask good questions 很重要,其中包括创建一个 Minimal, Complete, and Verifiable 示例。
  • 对不起,这是我第一次在这里发帖,我不知道如何在文本框中输入代码

标签: python python-3.x list function


【解决方案1】:

收集模块中的Counter 就是这样做的!你可以使用:

from collections import Counter
# get firstname from name
print(Counter(firstname))

编辑:我会让你弄清楚如何解析名字:)

【讨论】:

    【解决方案2】:

    你很亲密!您现在在函数中所做的只是查看全名,而说明说您应该只查看名字并查看它出现了多少。你应该拥有的是这样的东西。在查看循环中的每个单词时,创建一个数组,让我们说name 并将其设置为word.split()。然后就像在下面的代码中一样,检查列表中是否存在name[0](名字),如果存在则增加name_dict[name[0]]。如果没有,请使用 name[0] 创建一个新密钥并将其设置为 1。

    【讨论】:

      【解决方案3】:

      我会在 for 循环的开头创建一个临时变量,其中包含拆分名称,如下所示:

      for word in name_list:
        name = word.split()[0]
        if name in name_dict:
          name_dict[name] += 1
        else:
          name_dict[name] = 0
      

      注意.split() 函数返回一个list,因此要获取名字,您必须获取索引0 处的项目。

      希望有帮助!

      【讨论】:

      • 非常感谢!每当我使用拆分时,我都会忘记对其进行索引,所以这是我的问题
      【解决方案4】:

      这可以使用list comprehensions 在一行中实现。

      >>>from collections import Counter
      >>>name_list = ["Davy Jones", "Davy Crockett", "George Washington"]
      >>>Counter([name.split()[0] for name in name_list])
      #result -->
      Counter({'Davy': 2, 'George': 1})
      

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 2023-02-26
        • 2021-12-04
        • 1970-01-01
        相关资源
        最近更新 更多