튜플 목록이 있습니다. 그것에서 우리는 상위 k개의 빈번한 요소를 찾아야 합니다. k가 3이면 목록 안의 튜플에서 상위 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)]
정렬 및 반복기 사용
이 접근 방식에서는 itemgetter 함수를 사용하지만 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)]