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

ค้นหาองค์ประกอบที่ใช้บ่อย K อันดับต้น ๆ จากรายการสิ่งอันดับใน Python


เรามีรายการของทูเพิล ในนั้นเราจะต้องค้นหาองค์ประกอบความถี่ k อันดับต้น ๆ ถ้า k เป็น 3 เราจะต้องค้นหาองค์ประกอบสามอันดับแรกจากทูเพิลในรายการ

ด้วย defaultdict

เราใส่องค์ประกอบลงในคอนเทนเนอร์พจนานุกรมโดยใช้ defaultdict จากนั้นค้นหาเฉพาะองค์ประกอบที่ตรงตามเงื่อนไข k ด้านบนนั้น

ตัวอย่าง

import collections
from operator import itemgetter
from itertools import chain
# Input list initialization
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# set K
K = 3
#Given list
print("Given list:\n",listA)
print("Check value:\n",K)
# Using defaultdict
dict_ = collections.defaultdict(list)
new_list = list(chain.from_iterable(listA))
for elem in new_list:
   dict_[elem[0]].append(elem[1])
res = {k: sum(v) for k, v in dict_.items()}
# Using sorted
res = sorted(res.items(), key=itemgetter(1),
reverse=True)[0:K]
# Output
print("Top 3 elements are:\n", res)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

Given list:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
Check value:
3
Top 3 elements are:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]

ด้วยการเรียงลำดับและ itergetter

ในแนวทางนี้ เราใช้ฟังก์ชัน itemgetter แต่ใช้ภายในฟังก์ชัน sorted โดยระบุช่วงตั้งแต่ 0 ถึง K

ตัวอย่าง

from operator import itemgetter
from itertools import chain
# Input list initialization
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# set K
K = 3
#Given list
print("Given list:\n",listA)
print("Check value:\n",K)
# Using sorted
res = sorted(list(chain.from_iterable(listA)),
   key = itemgetter(1), reverse = True)[0:K]
# Output
print("Top 3 elements are:\n", res)

ผลลัพธ์

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

Given list:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
Check value:
3
Top 3 elements are:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]