我知道这是一个经常被问到的问题,但我没有访问Counter模块,因为我正在使用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,但只返回一个键的值数。
len(data['a'])
答案 0 :(得分:1)
您可以使用列表理解。
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])
说明: 首先从列表数据中取出字典对象,检查键是否为' a'是否存在于字典中,如果存在,则在列表中添加1。然后总结新列表。
答案 1 :(得分:1)
单行解决方案可能是:
{{1}}
答案 2 :(得分:0)
您无法访问 collections.Counter
,但在Python 2.5中添加了 collections.defaultdict
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
的计数,有更简单的方法可以执行此操作,但这将为您提供词典列表中所有键的计数。
答案 3 :(得分:0)
这个问题看起来非常类似于课堂作业。这里有一小段代码可以完成这项工作:
n=0
for d in data:
if 'a' in d:
n+=1
print(n)
这里n
是一个计数器,for
循环遍历字典列表。
如果键'a'在字典d中,则'a' in d
表达式将返回true,在这种情况下,计数器n将递增。最后打印结果。我相信Python 2.6中的括号是可选的(我使用的是3.6)。
答案 4 :(得分:0)
为此您可以编写以下函数,该函数适用于您提供的结构中的数据(dicts列表):
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。