【Python】辞書の重複した値のキーの数を取得する

例えば、次のようなモデルがあったときに、毎日いくつのデータが作られたのか知りたい。

そんな時に、defaultdictが便利だった。

class Test(models.Model):

    class Meta:
        db_table    = "test"

    id   = models.UUIDField( default=uuid.uuid4, primary_key=True, editable=False )
    dt   = models.DateTimeField(verbose_name="",default=timezone.now)
    test = models.CharField(verbose_name="", max_length=50)
from collections import defaultdict

test = Test.objects.all()

dic = { t:t.dt.date() for t in test }

d = defaultdict(list)
for k, v in dic.items():
    d[v].append(k)

//リストの場合
result_list = [ (k, len(v)) for k,v in d.items()]
print(result_list)

//結果 [(datetime.date(2022, 8, 13), 1), (datetime.date(2022, 8, 7), 4), (datetime.date(2022, 8, 6), 3)]

//辞書の場合
result_dict = { k:len(v) for k, v in d.items() }
print(result_dict)

//結果 {datetime.date(2022, 8, 13): 1, datetime.date(2022, 8, 7): 4, datetime.date(2022, 8, 6): 3}
参考記事

python 辞書の重複した値のキーを取り出す

Python defaultdict の使い方

お薦め動画