Python 如何计算特定dict键在dict列表中的出现次数

Python 如何计算特定dict键在dict列表中的出现次数,python,python-2.7,dictionary,count,Python,Python 2.7,Dictionary,Count,我试图计算指定键在我的dict列表中出现的次数。我使用了Counter()和最常见的(n)来计算所有键的总数,但是如何才能找到特定键的计数?我有此代码,目前不起作用: def Artist_Stats(self, artist_pick): entries = TopData(self.filename).data_to_dict() for d in entries: x = d['artist'] find_artist = Counter

我试图计算指定键在我的dict列表中出现的次数。我使用了
Counter()
最常见的(n)
来计算所有键的总数,但是如何才能找到特定键的计数?我有此代码,目前不起作用:

def Artist_Stats(self, artist_pick):

    entries = TopData(self.filename).data_to_dict()

    for d in entries:
        x = d['artist']
        find_artist = Counter()
        print find_artist[x][artist_pick]
“条目”数据约有60k个条目,如下所示:

[{'album': 'Nikki Nack', 'song': 'Find a New Way', 'datetime': '2014-12-03 09:08:00', 'artist': 'tUnE-yArDs'},]

您可以将
计数器
对象与
+
一起添加。下面是一个演示:

>>> from collections import Counter
>>> data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
>>> counter = Counter(data[0])
>>> for d in data[1:]:
...     counter += Counter(d)
...
>>> counter
Counter({'a': 4, 'c': 3, 'b': 2, 'd': 1})
>>> counter['a']  # Count of 'a' key
4
>>> counter['d']  # Count of 'd' key
1
>>>
或者,如果您想增加想象力,可以将for循环替换为
sum
和生成器表达式:

>>> from collections import Counter
>>> data = [{'a':1, 'b':1}, {'a':1, 'c':1}, {'b':1, 'c':1}, {'a':1, 'c':1}, {'a':1, 'd':1}]
>>> counter = sum((Counter(d) for d in data[1:]), Counter(data[0]))
>>> counter
Counter({'a': 4, 'c': 3, 'b': 2, 'd': 1})
>>>

不过我个人更喜欢for循环的可读性。

如果您想对某个特定键的键进行计数,而不是对不同的值进行计数,那么不使用
计数器()

如果要计算每个艺术家在曲目列表中出现的次数,也可以不使用
Counter()


您可以提取它,将其放入列表中,然后计算列表的长度

key_artists = [k['artist'] for k in entries if k.get('artist')]
len(key_artists)
编辑:如果数据较大,使用生成器表达式可能会更好:

key_artists = (1 for k in entries if k.get('artist'))
sum(key_artists)
第二次编辑

对于一个特定的艺术家,你可以用
if k.get('artist')==artist\u pick(/code>

3rd Edit:如果您对理解或生成器不满意,或者如果您觉得这样可以提高代码的可读性,您也可以循环

n = 0  # number of artists

for k in entries:
  n += 1 if k.get('artist') == artist_pick else 0

这可能是一个愚蠢的问题,但我要在哪里插入我正在寻找的特定键/艺术家(如def行中的“艺术家选择”)?我一直盯着这个,但我没看到。提前谢谢!非常感谢你!我仍然需要大量的练习阅读单行表达/理解。
key_artists = (1 for k in entries if k.get('artist'))
sum(key_artists)
n = 0  # number of artists

for k in entries:
  n += 1 if k.get('artist') == artist_pick else 0