2017-11-04 71 views
2

这是我目前的代码。你是如何获得从字典中随机选择的值

if Pokémon == 'Charmander': 
    selectyourmove = input('Select your move: Flamethrower, Fire Fang, 
Scratch or Ember: ')#select your move 
    if selectyourmove == 'Flamethrower': 
     numberchoosing1 = random.randint(20, 22)#randomly decides 
damage of the chosen move in the range 
     print(choice, 'has lost' ,numberchoosing1, 'health out of its' 
,HP, 'health!') 

我的字典很简单。它是:

HP = {'Char':'60', 'Squir':'50', 'Pika':'80', 'Eve':'50', 'Bulb':'70', 'Clef':'100'} 

所有这些都已被定义。

如何获取随机从字典

回答

2

首届方式获取该键关联的值是使用dict.popitem

从字典中删除并返回一个任意的(键,值)对。 popitem()对破坏性地遍历字典非常有用,正如经常在集合算法中使用的那样。如果字典为空,则调用popitem()将产生一个KeyError

注意,这种方法的随机性实际上来自实施哈希算法和python dict元素布局。这比随机性更隐晦。

真正的“随机”第二种方法是使用random.choice。它不修改字典,在提供给它的列表中选择随机指数:

import random 
hp = {'Char':'60', 'Squir':'50', 'Pika':'80', 'Eve':'50', 'Bulb':'70', 'Clef':'100'} 
print(random.choice(list(hp.keys()))) 

的工作原理示意图:

>>> random.choice(list(HP.keys())) 
'Pika' 
>>> random.choice(list(HP.keys())) 
'Clef' 
>>> random.choice(list(HP.keys())) 
'Pika' 

在这里建造单从.keys(),但是当你需要对(像popitem()),你可以使用.items()

>>> random.choice(list(HP.items())) 
('Clef', '100') 
>>> random.choice(list(HP.items())) 
('Pika', '80') 
>>> random.choice(list(HP.items())) 
('Char', '60') 

以同样的方式,考尔的SE的.values()会的工作,虽然只生产的dict项目右侧的元素,因而不会给你很大的满足感不像.keys().items()一样。

PS:那如果你需要重现分组。运行,可以解决“随机性”与random.seed

+0

另外,你怎么让它打印的健康呢?因为现在,它会打印词典,而不是口袋妖怪的健康 – Kim

+0

只需一秒钟,我会将其添加到答案中 –

2

这取决于你所说的“价值”是什么选择的值。字典是一组key,value对,因此从技术角度而言,您的字典中的只是字符串'50', '60', '50', '100', '70', '80',并且是字符串'Eve', 'Char', 'Squir', 'Clef', 'Bulb', 'Pika'

您可以这些集合使用HP.keys()HP.values(),您可以使用list()到这些集合转换为列表。然后,您可以使用random.choice来获得一个随机值。

因此,要获得从你的字典随机密钥(这好像是你真正想要的东西),你可以这样做:

import random 
keys = HP.keys() 
key_list = list(keys) 
choice = random.choice(key_list) 

或者,更简洁:

import random 
choice = random.choice(list(HP.keys())) 

然后你可以HP[choice]