如何计算字典列表中键的出现次数
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。
我知道这是一个常见问题,但是我无法访问计数器模块,因为我使用的是 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。