Computer >> Máy Tính >  >> Lập trình >> Python

Tìm K phần tử thường xuyên hàng đầu từ danh sách các bộ giá trị trong Python

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)]