我有一本字典,其中包含要排序的元素作為鍵,它們的權重/概率作為值。
我想使用值作為選擇下一個元素的概率來獲得一個排序的鍵串列。
例子:
l = {6: 5859, 7: 61636, 2: 53317}
# Example output 1
output1 = [7,2,6]
# Example output 2
output2 = [2,7,6]
我研究了一下,發現排序函式重新定義了它并將 random() 與權重本身相乘,但我沒有運行語法。所以我的“偽代碼”python解決方案是:
from random import random
l.sort(key = lambda element: random() * element.value())
當然,字典沒有排序功能并且 element.value() 不起作用,但這是我認為它可以使用更好的語法的方式。
還是有更好的解決方案?
uj5u.com熱心網友回復:
如果要對不是串列的可迭代物件進行排序,請先將其轉換為串列,或者sorted直接呼叫它。
例如,如果d是 a dict,那么您可以使用以下方法對其鍵進行排序:
a = sorted(d.keys()); 或者a = list(d); a.sort().
由于您需要鍵和值,因此您應該處理d.items()而不是處理d.keys(). 然后,如果key您傳遞給的函式sorted定義為lambda x: ...,則可以將 dict 鍵稱為x[0],將 dict 值稱為x[1]。
我似乎明白更高的權重應該會增加一個數字首先出現的概率。在這種情況下,您應該使用 , 的可選引數reverse=True以sorted降序而不是升序排序。
考慮到這一切,修復您的代碼:
import random
d = {6: 5859, 7: 61636, 2: 53317}
a = [k for k,v in sorted(d.items(), key=lambda x: random.uniform(0, x[1]), reverse=True)]
print(a)
# [7, 2, 6]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465123.html
標籤:python-3.x 排序 字典
下一篇:如何使用字典將數字代碼翻譯成單詞
