簡體   English   中英

從字典中保存沒有價值的鑰匙

[英]Saving a key from a dictionary without value

我將加權圖表示為字典,其中鍵表示一個頂點,以下列表表示入射在該頂點上的邊(邊的第一個數字權重和相鄰頂點的第二個數字權重):

wGraph = { 1 : [[2, 2],[3, 4],[3, 3]],
       3 : [[3, 2],[5, 4],[7, 5]],
       2 : [[2, 1],[4, 4],[3, 6]],
       4 : [[3, 1],[4, 2],[1, 6],[5, 3]],
       6 : [[3, 2],[1, 4],[8, 5]],
       5 : [[7, 3],[8, 6],[9, 7]],
       7 : [9, 5]}

我想將一個沒有它的值的隨機鍵從字典保存到一個稱為Visited的列表中。

random_num = random.randrange(len(wGraph))

visited = []

如何根據隨機數從字典中獲取密鑰?

要從某些值中進行隨機選擇,請使用random.choice 您要從字典的鍵中進行選擇,因此正是您要傳遞的內容:

random.choice(wGraph.keys())

答案取決於細節-您有多少個鍵,它們始終是1 ... max,您想重新訪問之前已經訪問過的鍵,還是隨着時間的推移添加了圖節點,或者它們保持不變,您最終會訪問所有鍵還是僅訪問其中的一小部分,依此類推。

一個想法:如果您的鍵始終如示例中那樣順序編號,則可以只使用random_num + 1 您已經知道它們是字典的關鍵,並且您無需構建任何特殊的東西。

另一種選擇是將密鑰列表隨機化一次:

>>> keys_to_visit = wGraph.keys()
>>> keys_to_visit.shuffle()
>>> first_key_to_visit = keys_to_visit.pop()

並且只要需要一個新的,就繼續調用.pop()。 僅當您不想重新訪問節點並且節點列表是恆定的時,此方法才有效。

import random

visited = []

def random_key():
    wGraph = {1: [[2, 2], [3, 4], [3, 3]],
              3: [[3, 2], [5, 4], [7, 5]],
              2: [[2, 1], [4, 4], [3, 6]],
              4: [[3, 1], [4, 2], [1, 6], [5, 3]],
              6: [[3, 2], [1, 4], [8, 5]],
              5: [[7, 3], [8, 6], [9, 7]],
              7: [9, 5]}

    random_key = random.choice(wGraph.keys())

    if random_key not in visited:
        visited.append(random_key)
    print visited


for e in range(7):
    random_key()

暫無
暫無

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

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