如何计算python中dict中最常见的10个值
Posted
技术标签:
【中文标题】如何计算python中dict中最常见的10个值【英文标题】:How to count top 10 most common values in a dict in python 【发布时间】:2015-02-02 21:34:25 【问题描述】:我是 python 和一般编程的新手,所以请善待。我正在尝试分析包含音乐信息的 csv 文件并返回前 n 个最常收听的乐队。从下面的代码中,每首歌曲收听都是一个列表中的一个字典条目,格式如下:
['album': 'Exile on Main Street', 'song': 'Happy', 'datetime': '3 Dec 2014 14:08', 'artist': 'The Rolling Stones', 'album': 'II', 'song': 'Black Dog', 'datetime': '1 Dec 2014 08:08', 'artist': 'Led Zepplin']
from collections import Counter
def count_artist_plays(filename):
with open(filename, 'r') as data:
header = data.readline().strip().split(',')
entries = []
for line in data:
entry = line.strip().split(',')
listens =
for info, type in enumerate(header):
listens[type] = entry[info]
entries.append(listens)
for d in entries:
arts = d['artist']
c = Counter(arts)
print c.most_common(10)
如何获得最常见的字符串(波段)而不是我在下面得到的字符细分?
[('s', 2), ('a', 1), (' ', 1), ('E', 1), ('l', 1), ('o', 1), ('n', 1), ('S', 1), ('v', 1), ('y', 1)]
【问题讨论】:
【参考方案1】:初始化Counter一次,让keys成为艺术家,每次循环增加一个key(艺术家):
c = Counter()
for d in entries:
arts = d['artist']
c[arts] += 1
print(c.most_common(10))
当arts
为字符串时,c = Counter(arts)
统计arts
中的字符数:
In [522]: collections.Counter('Led Zepplin')
Out[522]: Counter('e': 2, 'p': 2, ' ': 1, 'd': 1, 'i': 1, 'L': 1, 'l': 1, 'n': 1, 'Z': 1)
相比之下:
In [523]: c = collections.Counter()
In [524]: c['Led Zepplin'] += 1
In [525]: c['The Rolling Stones'] += 1
In [526]: c.most_common()
Out[526]: [('Led Zepplin', 1), ('The Rolling Stones', 1)]
或者,正如 Jon Clements 指出的那样,建立一个所有艺术家的列表,然后计算列表:
c = Counter(d['artist'] for d in entries)
print(c.most_common(10))
请注意,上面使用generator expression 来避免构建(可能)大型临时列表,同时具有更简洁易读的语法。
【讨论】:
或者只是Counter(el['artist'] for el in entries).most_common(10)
如果您将其保留为 gen-exp 而不是 list-comp,那么您就不会担心您提到的内存问题...以上是关于如何计算python中dict中最常见的10个值的主要内容,如果未能解决你的问题,请参考以下文章