如何在 python 字典中獲得具有最大值的最大鍵。在下面的示例中,您可以看到 1 和 2 具有相同的頻率。但我想回傳更大的密鑰。
nums = [1,2,2,3,1]
frq = {}
for i in nums:
if i not in frq:
frq[i] = 1
else:
frq[i] = 1
frequency = max(frq, key=frq.get)
print(frequency)
uj5u.com熱心網友回復:
讓您的key函式回傳值和關聯鍵的元組。首先比較元組的第一個元素,第二個元素將打破平局。
>>> from collections import Counter
>>> nums = [1, 2, 2, 3, 1]
>>> frq = Counter(nums)
>>> max(frq, key=lambda n: (frq[n], n))
2
請注意,自動collections.Counter生成frq字典給定nums。
uj5u.com熱心網友回復:
您可以對鍵使用元組比較來根據它們的頻率比較鍵,然后僅當頻率相同時才根據鍵的實際值進行平局:
frequency = max(frq, key=lambda x: (frq.get(x), x))
通過此更改,將輸出:
2
uj5u.com熱心網友回復:
你可以試試這個,它首先按頻率排序,然后按鍵排序:
nums = [1,2,2,3,1]
frq = {}
for i in nums:
if i not in frq:
frq[i] = 1
else:
frq[i] = 1
frequency = max(frq, key=lambda x: (frq.get(x), x))
print(frequency)
輸出:
2
或者,您可以使用 Python 集合模塊中的 Counter 資料型別為您完成一些作業:
from collections import Counter
nums = [1,2,2,3,1]
frequency = max(Counter(nums).items(), key=lambda x: (x[1], x[0]))[0]
print(frequency)
這里我們將 items() 傳遞給 max(),以便鍵和值都可用于鍵函式 (lambda)。max() 的結果現在將是一個 (key, value) 元組,因此我們使用[0]只獲取鍵作為我們的結果。
更新:在不覆寫默認key引數的情況下,另一種方法max()是:
frequency = max((v, k) for k, v in Counter(nums).items())[1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465161.html
上一篇:如何在行尾中斷for回圈
下一篇:如何過濾非模型欄位?
