Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python – Tìm số lần xuất hiện của mỗi giá trị cho một key cụ thể

Đếm tần suất xuất hiện của từng giá trị cho một key cụ thể trong danh sách các dictionary. Sử dụng itertools.groupby và lambda.

Mã nguồn


from itertools import groupby

my_dict = [
    {'pyt': 13, 'fun': 44},
    {'pyt': 63, 'best': 15},
    {'pyt': 24, 'fun': 34},
    {'pyt': 47, 'best': 64}
]
print("Danh sách dictionary:", my_dict)

my_key = 'pyt'
print("Key:", my_key)

# groupby yêu cầu dữ liệu đã sắp xếp theo key
my_result = [{keys: len(list(value))} for keys, value in groupby(my_dict, lambda index: index[my_key])]

print("Kết quả:", my_result)

Kết quả

Danh sách dictionary: [{'pyt': 13, 'fun': 44}, {'pyt': 63, 'best': 15}, {'pyt': 24, 'fun': 34}, {'pyt': 47, 'best': 64}]
Key: pyt
Kết quả: [{13: 1}, {63: 1}, {24: 1}, {47: 1}]

Giải thích

  • groupby(iterable, keyfunc) nhóm các phần tử liên tiếp có cùng key.
  • lambda index: index[my_key] trích xuất giá trị key 'pyt' từ mỗi dict.
  • Dữ liệu CHƯA được sắp xếp theo 'pyt' (13, 63, 24, 47) → mỗi nhóm size=1.
  • Kết quả: list dict {giá_trí: số_lần} cho từng nhóm liên tiếp.

Quan trọng: Cần sắp xếp trước


# Sắp xếp trước khi groupby
sorted_dicts = sorted(my_dict, key=lambda d: d[my_key])
my_result = [{k: len(list(g))} for k, g in groupby(sorted_dicts, lambda d: d[my_key])]
# Kết quả: [{13:1}, {24:1}, {47:1}, {63:1}] (vẫn 1 vì giá trị đều khác nhau)

Nếu muốn đếm tổng thể (không yêu cầu liên tiếp), dùng Counter:


from collections import Counter
cnt = Counter(d[my_key] for d in my_dict)
print(dict(cnt))  # {13:1, 63:1, 24:1, 47:1}