如何计算字典列表中键的出现次数

How to count occurrences of key in list of dictionaries

我知道这是一个常见问题,但是我无法访问计数器模块,因为我使用的是 Python 的 v2.6。我想计算特定键在字典列表中出现的次数。

如果我的字典是这样的:

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]

我如何知道 "a" 出现了多少次?我试过使用 len,但只有 returns 个键的值数。

len(data['a'])

您将无法访问 collections.Counter,但 collections.defaultdict 已添加到 Python 2.5

keys 并展平列表

data = [j for i in data for j in i.keys()]

# ['a', 'b', 'a', 'c', 'c', 'b', 'a', 'c', 'a', 'd']

collections.defaultdict

from collections import defaultdict
dct = defaultdict(int)

for key in data:
  dct[key] += 1

# defaultdict(<type 'int'>, {'a': 4, 'c': 3, 'b': 2, 'd': 1})

如果您只需要 a 的计数,有更简单的方法可以做到这一点,但这将为您提供词典列表中所有键的计数。

这个问题看起来很像 class 作业。这里有一段简单的代码可以完成这项工作:

n=0
for d in data:
   if 'a' in d:
       n+=1
print(n) 

这里n是一个计数器,for循环遍历字典列表。 如果键 'a' 在字典 d 中,'a' in d 表达式将 return 为真,在这种情况下,计数器 n 将递增。最后打印结果。我相信 Python 2.6 括号是可选的(我使用的是 3.6)。

您可以使用列表理解。

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
sum([1 for d in data if 'a' in d])

说明: 首先从列表数据中取出字典对象,检查字典中是否存在key 'a',如果存在,则将1添加到列表中。然后对新列表求和。

单线解决方案可以是:

len([k for d in data for k in d.keys() if k == 'a'])

为此,您可以编写以下函数,该函数适用于您提供的结构(字典列表)中的数据:

def count_key(key,dict_list):
    keys_list = []
    for item in dict_list:
        keys_list += item.keys()
    return keys_list.count(key)

然后,您可以调用函数如下:

data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
count_a = count_key('a',data)

在这种情况下,count_a 将为 4。