我如何从字典中得到一个随机对?我正在制作一款游戏,玩家需要猜测一个国家的首都,我需要随机出现问题。

字典看起来像{'VENEZUELA':'CARACAS'}

我该怎么做呢?


当前回答

我假设你在做一个类似测验的应用程序。对于这种应用程序,我写了一个函数,如下所示:

def shuffle(q):
"""
The input of the function will 
be the dictionary of the question
and answers. The output will
be a random question with answer
"""
selected_keys = []
i = 0
while i < len(q):
    current_selection = random.choice(q.keys())
    if current_selection not in selected_keys:
        selected_keys.append(current_selection)
        i = i+1
        print(current_selection+'? '+str(q[current_selection]))

如果我将输入问题={'委内瑞拉':'加拉加斯','加拿大':'多伦多'},并调用函数shuffle(问题),那么输出将如下:

VENEZUELA? CARACAS
CANADA? TORONTO

您还可以通过调整选项进一步扩展此功能

其他回答

试试这个(使用随机。物品选择)

import random

a={ "str" : "sda" , "number" : 123, 55 : "num"}
random.choice(list(a.items()))
#  ('str', 'sda')
random.choice(list(a.items()))[1] # getting a value
#  'num'

这适用于Python 2和Python 3:

随机键:

random.choice(list(d.keys()))

一个随机值

random.choice(list(d.values()))

一个随机键和值

random.choice(list(d.items()))

当他们要求随机配对时,他们指的是键和值。

对于这样一个字典,其中的关键:价值观是国家:城市,

使用random.choice()。

将字典键传递给这个函数,如下所示:

import random
keys = list(my_dict)
country = random.choice(keys)

你可能希望跟踪在一轮中已经被调用的键,当获得一个新的国家时,循环直到随机选择不在那些已经“抽取”的列表中……只要绘制的列表比键列表短。

如果你不想使用随机模块,你也可以尝试popitem():

>> d = {'a': 1, 'b': 5, 'c': 7}
>>> d.popitem()
('a', 1)
>>> d
{'c': 7, 'b': 5}
>>> d.popitem()
('c', 7)

因为字典不保留顺序,所以使用popitem可以从字典中获得任意(但不是严格随机)顺序的项。

还要记住,popitem从字典中删除键值对,正如文档中所述。

Popitem()用于对字典进行破坏性迭代

因为最初的帖子想要一对:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}
country, capital = random.choice(list(d.items()))

(python 3风格)