如何在python字典中获取随机值

问题描述 投票:121回答:12

如何从dict获得随机对?我正在制作一个游戏,您需要猜测一个国家的首都,我需要随机出现问题。

dict看起来像{'VENEZUELA':'CARACAS'}

我怎样才能做到这一点?

python random dictionary key
12个回答
214
投票

一种方式(在Python 2. *中)将是:

import random
d = {'VENEZUELA':'CARACAS', 'CANADA':'OTTAWA'}
random.choice(list(d.keys()))

编辑:问题在原始帖子后几年被更改,现在要求一对,而不是单个项目。最后一行应该是:

country, capital = random.choice(list(d.items()))

3
投票

我假设您正在进行一种测验应用程序。对于这种应用程序,我编写了一个函数,如下所示:

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

如果我将输入questions = {'VENEZUELA':'CARACAS', 'CANADA':'TORONTO'}并调用函数shuffle(questions)然后输出如下:

VENEZUELA? CARACAS
CANADA? TORONTO

你可以通过改变选项来进一步扩展这一点


1
投票

试试这个(使用来自项目的random.choice)

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'

0
投票
b = { 'video':0, 'music':23,"picture":12 } 
random.choice(tuple(b.items())) ('music', 23) 
random.choice(tuple(b.items())) ('music', 23) 
random.choice(tuple(b.items())) ('picture', 12) 
random.choice(tuple(b.items())) ('video', 0) 

25
投票

我写这个尝试解决同样的问题:

https://github.com/robtandy/randomdict

它具有O(1)随机访问键,值和项目。


15
投票

如果您不想使用random模块,您也可以尝试popitem()

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

dict doesn't preserve order以来,通过使用popitem,您可以从中获得任意(但不是严格随机)的项目。

还要记住,popitem从字典中删除了键值对,如docs中所述。

popitem()对于破坏性地迭代字典非常有用


9
投票
>>> import random
>>> d = dict(Venezuela = 1, Spain = 2, USA = 3, Italy = 4)
>>> random.choice(d.keys())
'Venezuela'
>>> random.choice(d.keys())
'USA'

通过在字典(国家)的random.choice上调用keys


8
投票

试试这个:

import random
a = dict(....) # a is some dictionary
random_key = random.sample(a, 1)[0]

这绝对有效。


4
投票

如果您不想使用random.choice(),可以尝试这种方式:

>>> list(myDictionary)[i]
'VENEZUELA'
>>> myDictionary = {'VENEZUELA':'CARACAS', 'IRAN' : 'TEHRAN'}
>>> import random
>>> i = random.randint(0, len(myDictionary) - 1)
>>> myDictionary[list(myDictionary)[i]]
'TEHRAN'
>>> list(myDictionary)[i]
'IRAN'

4
投票

由于原帖想要这对:

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

(python 3风格)


3
投票

由于这是作业:

查看random.sample(),它将从列表中选择并返回一个随机元素。您可以使用dict.keys()获取字典键列表,并使用dict.values()获取字典值列表。


3
投票

这适用于Python 2和Python 3:

随机密钥:

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

随机值

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

随机键和值

random.choice(list(d.items()))
© www.soinside.com 2019 - 2024. All rights reserved.