เรามีรายการของทูเพิล ในนั้นเราจะต้องค้นหาองค์ประกอบความถี่ 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)]