簡體   English   中英

如何從 Python 的字典中找到隨機選取值的鍵?

[英]How can i find the key of a random picken value from a dictionary in Python?

我是 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。非常感謝任何建議。 謝謝你。

如果您對隨機選擇的鍵值都感興趣,那么為什么不考慮隨機選擇一個鍵並收集該鍵的值呢?

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的鍵值對,然后過濾對應於pick_valuevalue

再次,我推薦第一種策略。

我了解您的目標是找到所選隨機值的鍵,然后將其刪除。 下面的代碼就是這樣做的。 還要記住,如果您的字典中有重復的值,代碼將刪除第一個鍵:找到該值的值對。

在重復的情況下,需要找到所有鍵的列表,然后在單獨的 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())

    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM