Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Find Top K Frequent Elements จาก List of Tuples ใน Python

ได้ลิสต์ของ Tuple (แต่ละ Tuple มี key และค่า) หา Top K คีย์ที่มีค่ารวมหรือความถี่สูงสุด

ตัวอย่าง

[[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]], K=3 → Top 3: [('Tue',768), ('Wed',512), ('Fri',341)]

วิธี 1: ใช้ defaultdict รวมค่า แล้ว sorted

import collections
from operator import itemgetter
from itertools import chain

listA = [[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]]
K = 3
flat = list(chain.from_iterable(listA))
d = collections.defaultdict(list)
for k, v in flat:
    d[k].append(v)
summed = {k: sum(v) for k, v in d.items()}
res = sorted(summed.items(), key=itemgetter(1), reverse=True)[:K]
print(res)  # [('Tue', 768), ('Wed', 512), ('Fri', 341)]

วิธี 2: ใช้ sorted ตรงกับ flat list (ถ้าแต่ละคีย์มีแค่ 1 Tuple)

from operator import itemgetter
from itertools import chain

listA = [[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]]
K = 3
res = sorted(chain.from_iterable(listA), key=itemgetter(1), reverse=True)[:K]
print(res)  # [('Tue', 768), ('Wed', 512), ('Fri', 341)]

สรุป

วิธี 1 ใช้เมื่อคีย์ซ้ำได้ (ต้องรวมค่า) วิธี 2 ใช้เมื่อคีย์ไม่ซ้ำ (แต่ละคีย์ 1 Tuple)