Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 튜플 목록에서 상위 K 빈도 요소 찾기

<시간/>

튜플 목록이 있습니다. 그것에서 우리는 상위 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)]