從 Python 元組列表中查詢最常出現的 K 個元素
我們有一個元組列表。我們需要在其中查找出現頻率最高的前 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)]使用 sorted 和 itergetter
這種方法中,我們使用 itemgetter 函式,但透過指定 0 到 K 的範圍將其應用於 sorted 函式內。
示例
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)]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP