Chúng tôi có một danh sách các bộ giá trị. Trong đó, chúng ta bắt buộc phải tìm k phần tử thường xuyên hàng đầu. Nếu k là 3, chúng tôi bắt buộc phải tìm ba phần tử hàng đầu từ các bộ giá trị bên trong danh sách.
Với sắc lệnh mặc định
Chúng tôi đặt các phần tử vào một vùng chứa từ điển bằng cách sử dụng defaultdict. Sau đó, chỉ tìm ra các phần tử thỏa mãn k điều kiện hàng đầu đó.
Ví dụ
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)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
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)]
Có sắp xếp và tiện ích
Trong cách tiếp cận này, chúng tôi sử dụng hàm itemgetter nhưng áp dụng nó trong hàm đã sắp xếp bằng cách đề cập đến phạm vi từ 0 đến K.
Ví dụ
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)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
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)]