我将加权图表示为字典,其中键表示顶点,后面的列表表示入射在顶点上的边(边的第一个数字权重和邻近顶点的第二个数字):
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 = []
如何根据随机数从字典中获取密钥?
答案 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()