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

5

我想要在我的字典列表中计算指定键出现的次数。我已经使用了Counter()most_common(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]

“entries”数据集包含约6万个条目,其格式如下:
[{'album': 'Nikki Nack', 'song': 'Find a New Way', 'datetime': '2014-12-03 09:08:00', 'artist': 'tUnE-yArDs'},]
3个回答

10
你可以提取它,放入列表中,然后计算列表的长度。

你可以提取它,放入列表中,然后计算列表的长度。

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')替换为if k.get('artist') == artist_pick

第三次编辑: 如果你不喜欢理解或生成器,或者你觉得它增强了代码的可读性,你也可以循环。

n = 0  # number of artists

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

这可能是一个愚蠢的问题,但我应该在哪里插入我要查找的特定键/艺术家(例如def行中的“artist_pick”)?我一直盯着它看,但我没看到。提前致谢! - mo_shun
非常感谢!我仍需要大量练习阅读一行表达式/理解。 - mo_shun

2
您可以使用“+”将Counter对象相加。以下是演示:
>>> 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
>>>

或者,如果您想变得花哨一点,可以用sum和一个生成器表达式替换 for 循环:

>>> 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循环的可读性。


1
如果你想计算特定键的密钥数量而不是不同值的数量,则可以不使用Counter()
artist_key_count = 0
for track in entries:
    if 'artist' in track.keys():
        artist_key_count += 1

如果您想要计算每位艺术家在您的歌曲列表中出现的次数,您也可以不使用Counter()来实现:
artist_counts = {}
for track in entries:
    artist = track.get('artist')
    try:
        artist_counts[artist] += 1
    except KeyError:
        artist_counts[artist] = 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接