Python - 辞書のリスト内の辞書値が出現した回数を数える最良の方法は?

okwaves2024-01-25  187

次のような辞書のリストがあります。

[{"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}]

ここには、すべてのオーディオファイルと、このリスト内でそれらが出現した回数がリストされます。

これを達成するには何が最善の方法でしょうか?



------------------------

コレクション.カウンターを使用できます

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'])]

1

collections.Counter はリストに限定されません。Counter([x['Audiofile']] の代わりに Counter(x['Audiofile'] for x in d) を実行することもできます。 d の x の場合])

– ダウェオ

2020 年 9 月 3 日 12:09



------------------------

辞書のリストを用意する代わりに、辞書を反復処理して、カウンタとして機能する辞書を 1 つ生成することもできます。

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()]

これであなたが探していることが解決されることを願っていますまたは - これはすべてを線形時間で実行します。



------------------------

from collections import Counter

arr = [{"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"}]
cnt = Counter()
for item in arr:
    cnt[item['Audiofile']] += 1
print(dict(cnt))

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。