Python-计算字典列表中字典值出现次数的最佳方法?

时间:2020-09-03 11:54:13

标签: python list dictionary

我有一个这样的词典列表:

[{"Audiofile": "test1.mp3", "Time": "2020-09-03 13:47:22.478868", "Author": "Lisa"}, {"Audiofile": "test2.mp3", "Time": "2020-09-03 13:47:32.239118", "Author": "Mike"},
{"Audiofile": "test2.mp3", "Time": "2020-09-03 13:49:15.535216", "Author": "John"}]

最后,在此示例中,我希望有一个这样的词典列表:

[{"test1.mp3": 1}, {"test2.mp3": 2}]

列出所有音频文件及其在此列表中出现的时间。

实现此目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

您可以遍历字典并执行此操作,而不是拥有字典列表,而可以生成一个字典作为计数器。

from collections import defaultdict
counter = defaultdict(int)
for audio_data in data_dictionaries: #your list of dictionaries
    counter[audio_data['Audiofile']] += 1

如果必须将其作为字典列表获取,则可以使用简单的列表理解来转换此计数器,如下所示:

list_dictionaries = [{k:v} for k,v in counter.items()]

我希望这能解决您的需求-这可以在线性时间内完成所有工作。

答案 1 :(得分:0)

您可以使用collections.Counter

from collections import Counter

res = Counter(x['Audiofile'] for x in d)
print(dict(res))

输出:

{'test1.mp3': 1, 'test2.mp3': 2}

使用itertools.groupby

res = [{k: len(list(g))} for k, g in groupby(d, lambda x: x['Audiofile'])]

答案 2 :(得分:0)

Canvas.Left