你如何获得从字典中随机选择的值

时间:2017-11-04 00:02:58

标签: python-3.x

这是我目前的代码。

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

我的字典非常简单。它是:

{{1}}

所有这些都已定义。

如何获取从字典中随机选择的值

2 个答案:

答案 0 :(得分:3)

第一种方法是使用dict.popitem

  

从字典中删除并返回任意(键,值)对。   popitem()对于破坏性地迭代字典很有用,就像在集合算法中经常使用的那样。如果字典为空,则调用popitem()会引发KeyError

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

第二种方式,真正'随机',正在使用random.choice。它不会修改dict,因为在提供给它的列表中选择随机索引:

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

同样,当然.values()只会生成dict项的右手元素,因此不会像.keys()或{{1那样让您满意确实。

PS:那么如果你需要重现prev。运行,您可以使用random.seed

修复“随机性”

答案 1 :(得分: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]

获取该密钥的关联值