我有一本字典:其中 0 和 1 是兩個索引,兩個字典中的其他數字是前一個字串串列中每個單詞的頻率
letter_positions={0: {'l': 1, 'y': 2, 'm': 1, 'r': 2}, 1: {'t': 2, 'e': 1, 'n': 1,'s':3}}
我通過一個函式得到它,該函式按索引回傳具有字串中最常見字符的字典。
現在我正在使用這個函式來獲取每個索引最常見的字符:
final_dict = {}
for idx, counts in letter_positions.items():
most_popular = max(counts.items(), key=lambda v: v[1])
final_dict[idx] = most_popular[0][0]
問題是,在字典的索引 0 中最常見的字符是“y”和“r”,我的代碼在 final_dict 字典中回傳“y”,但我想獲得最低的字母字符“r”。
如何編輯我的代碼或我必須在此處添加什么
most_popular = max(counts.items(), key=lambda v: v[1])
滿足我的需要?謝謝
uj5u.com熱心網友回復:
我建議按鍵對字典進行排序:
most_popular = max(sorted(counts.items()), key=lambda v: v[1])
uj5u.com熱心網友回復:
您可以切換到min()和更改key=功能:
letter_positions = {
0: {"l": 1, "y": 2, "m": 1, "r": 2},
1: {"t": 2, "e": 1, "n": 1, "s": 3},
}
final_dict = {}
for idx, counts in letter_positions.items():
most_popular = min(counts.items(), key=lambda v: (-v[1], v[0]))
final_dict[idx] = most_popular[0][0]
print(final_dict)
印刷:
{0: 'r', 1: 's'}
uj5u.com熱心網友回復:
排序時,您可以在 a list(or tuple) 中添加第二個度量,這樣與第一個位置相關的元素將由第二個值決定:
final_dict = {}
for idx, counts in letter_positions.items():
most_popular = max(counts.items(), key=lambda v: [v[1],-ord(v[0])])
final_dict[idx] = most_popular[0][0]
在上面的代碼中,我們使用[v[1],-ord(v[0])]新的度量來對值進行排序。ord回傳一個整數,表示每個字母在字母表中的位置,因此ord(v[0])會給字母表開頭的字母更高的分數。
現在的輸出是:
# final_dict = {0: 'r', 1: 's'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532450.html
標籤:Python排序
上一篇:按第二個元素對元組陣列排序,然后按Haskell中的第一個元素排序
下一篇:如何在本機反應中過濾陣列?
