从字典中保存一个没有值的密钥

时间:2016-06-23 06:24:10

标签: python dictionary graph

我将加权图表示为字典,其中键表示顶点,后面的列表表示入射在顶点上的边(边的第一个数字权重和邻近顶点的第二个数字):

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 = []

如何根据随机数从字典中获取密钥?

3 个答案:

答案 0 :(得分:3)

要从某些值中随机选择,请使用random.choice。您想要从字典的键中进行选择,以便准确传递您的字符:

random.choice(wGraph.keys())

答案 1 :(得分:3)

答案取决于细节 - 你有多少把钥匙,它们总是数字1 ......最大,你想重新访问之前已经访问过的密钥,是否随着时间的推移添加了图形节点或如果他们保持不变,你最终会访问所有密钥还是只有一小部分密钥,依此类推。

一个想法:如果您的密钥始终按照示例顺序编号,则可以使用random_num + 1。你已经知道他们是dict的关键,你不必构建任何特别的东西。

另一种选择是将密钥列表随机化一次:

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

只要你需要一个新的,就继续调用.pop()。这仅适用于您不想重新访问节点且节点列表不变的情况。

答案 2 :(得分:0)

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()