我是 Python 的初學者。我制作了一本串列字典。我想選擇一個隨機值,然后知道該值的鍵。那可能嗎?例如
`lex = {"q1": [["B", "A", "C", "D"],["2" ,"D"]],
"q2": [["C", "A", "Z", "D"],["W","K"]],
"q3": [["A", "K", "D", "C"],["me", "S"]],
"q4": [["B", "L", "A", "F"],[ "1974", "D"]]}
lex_list = list(lex.values())
pick_value = random.sample(lex_list,1)`
有沒有辦法知道哪個是隨機值的關鍵?我的目的是從串列中洗掉該pick_value。非常感謝任何建議。謝謝你。
uj5u.com熱心網友回復:
我了解您的目標是找到所選隨機值的鍵,然后將其洗掉。下面的代碼就是這樣做的。還要記住,如果您的字典中有重復的值,代碼將洗掉第一個鍵:找到該值的值對。
在重復的情況下,需要找到所有鍵的串列,然后在單獨的 for 回圈中洗掉。pick_value 是一個嵌套串列,因此 pick_value[0] 在這里作業。
生成的 new_list 洗掉了 pick_value。
for key,value in lex.items():
if value == pick_value[0]:
lex.pop(key)
break
new_list = list(lex.values())
uj5u.com熱心網友回復:
如果您對隨機選擇的鍵和值都感興趣,那么為什么不考慮隨機選擇一個鍵并收集該鍵的值呢?
import random
lex = {"q1": [["B", "A", "C", "D"],["2" ,"D"]],
"q2": [["C", "A", "Z", "D"],["W","K"]],
"q3": [["A", "K", "D", "C"],["me", "S"]],
"q4": [["B", "L", "A", "F"],[ "1974", "D"]]}
# Randomly pick one key
r_key = random.choice(list(lex.keys()))
# Get the value corresponding to that key
r_value = lex[r_key]
print(r_key, r_value)
這用于random.choice從可迭代物件中選擇一個元素。這輸出:
q4 [['B', 'L', 'A', 'F'], ['1974', 'D']]
如果您真的希望繼續使用您已經擁有隨機值的策略,但想要相應的隨機密鑰,那么這可能會起作用:
import random
lex = {"q1": [["B", "A", "C", "D"],["2" ,"D"]],
"q2": [["C", "A", "Z", "D"],["W","K"]],
"q3": [["A", "K", "D", "C"],["me", "S"]],
"q4": [["B", "L", "A", "F"],[ "1974", "D"]]}
lex_list = list(lex.values())
pick_value = random.sample(lex_list,1)
# Find the corresponding key(s)
keys = [key for key, value in lex.items() if value == pick_value[0]]
print(keys)
這輸出例如['q2']。請記住,我一直將 key稱為多個,因為理論上多個鍵可能對應于相同的值。如果這在您的程式中沒有發生,那么您可以將keys[0]其作為您的密鑰。
該策略使用串列推導來遍歷來自 的鍵值對lex,然后過濾value對應的pick_value。
再次,我推薦第一種策略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/418713.html
標籤:
