【问题标题】:Counting values in list by putting in dictionary通过放入字典计算列表中的值
【发布时间】:2015-11-24 19:12:12
【问题描述】:
alist = [5, 7, 6, 2, 9, 1, 7]

D = {}

为列表中的每个唯一数字设置一个新键 对于字典中的每个键,计算该键的数量并设置为值

这应该看起来像 {5:1, 2:1, 6:1, 9:1, 1:1, 7:2}

算法:

For each number n on the input list:
∗ If n in count: set count[n] to count[n] + 1
∗ else: set count[n] to 1

我不知道该怎么做。谁能告诉我怎么做?

尝试:

for number in alist:
    if number in D:
        D[number] = D[number]+1
    else:
        D[number] = 1

错误:

Traceback (most recent call last): File "<pyshell#15>", line 3, in
<module> D[number] = D[number]+1 KeyError: 5

【问题讨论】:

  • 欢迎来到 Stack Overflow!您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题。
  • 我是新手,我正在尝试。我试着把它写出来,但我得到了一个错误。这就是我的意思:对于 alist 中的数字:如果 alist 中的数字:D[number] = D[number+1] else: D[number] = 1
  • D[number+1] 中的+1 移动到括号外,如D[number]+1,或者将该行更改为D[number]+=1
  • 您应该在遇到错误时发布带有问题的 Traceback 以及您尝试解决问题的代码。
  • 谢谢你们,对不起。就像我说的,我是编程和这个网站的新手。让我对 R Nar 提出的建议稍加研究一下,然后我会将结果发布回来。

标签: python list dictionary key


【解决方案1】:
>>> from collections import Counter
>>> Counter(alist)
Counter({7: 2, 1: 1, 2: 1, 5: 1, 6: 1, 9: 1})

【讨论】:

    【解决方案2】:

    最简单的方法是字典理解

    count_dict = {elem:a_list.count(elem) for elem in a_list}
    

    它类似于一个 for 循环,但它为每个字典项指定键和值。

    【讨论】:

      【解决方案3】:

      Ayush Shanker's answer 是一种完全有效的方式来做你想做的事。我会指出如何修复你现在拥有的代码。

      首先,在这两行中

      for number in alist:
          if number in alist:
      

      您基本上是在说“对于 alist 中的每个数字,检查它是否在 alist 中”。当然是的!所以,你真的希望if number in D: 用于第二行,因为你正在检查数字是否在你正在构建的字典中。

      第二个问题是这样的:

              D[number] = D[number+1]
      

      numbernumber+1 这里是索引,所以你指的是D 中的两个不同元素。解决方案是将+1 移到外面。这是固定代码的样子:

      for number in alist:
          if number in D:
              D[number] = D[number] + 1
          else:
              D[number] = 1
      

      为了更加 Pythonic,您还可以将 D[number] = D[number] + 1 替换为 D[number] += 1

      【讨论】:

        【解决方案4】:

        要修复您的代码和算法,您需要检查n 是否在D.keys() 中(返回D 字典的键列表:

        >>> D = {}
        >>> for n in alist:
            if n in D.keys():
                D[n] += 1
            else:
                D[n] = 1
        
        
        >>> D
        {1: 1, 2: 1, 5: 1, 6: 1, 7: 2, 9: 1}
        

        【讨论】:

          【解决方案5】:

          解决方案:

           def mode(somelist):
                  count = {}
                  for n in alist:
                      if n in count:
                          count[n]+=1
                      else:
                          count[n] = 1
                  return(count)
          

          【讨论】:

            猜你喜欢
            • 2021-04-24
            • 2020-07-19
            • 1970-01-01
            • 2012-10-05
            • 2022-01-18
            • 2021-12-24
            • 1970-01-01
            • 1970-01-01
            • 2017-07-02
            相关资源
            最近更新 更多