问题的提出和解决方案概述
本文将向你展示如何在Python中从字典中获得一个随机条目。
为了使它更有趣,我们有以下的运行场景。
剧情:辛克莱尔先生,一位8年级的数学老师,正在给他的学生做一个关于前25个元素周期表**的测验。他要求你写一个Python脚本,以便在运行时,从下面的字典中随机生成一个键、值或键:值对来问他的学生。
els = {'Hydrogen': 'H', 'Helium': 'He', 'Lithium': 'Li',
'Beryllium': 'Be', 'Boron': 'B', 'Carbon': 'C',
'Nitrogen': 'N', 'Oxygen': 'O', 'Fluorine': 'F',
'Neon': 'Ne', 'Sodium': 'Na', 'Magnesium': 'Mg',
'Aluminum': 'Al', 'Silicon': 'Si', 'Phosphorus': 'P',
'Sulfur': 'S', 'Chlorine': 'Cl', 'Argon': 'Ar',
'Potassium': 'K', 'Calcium': 'Ca', 'Scandium': 'Sc',
'Titanium': 'Ti', 'Vanadium': 'V', 'Chromium': 'Cr',
'Manganese': 'Mn'}
问题:我们如何编写代码来从字典中获得一个随机条目?
我们可以通过以下方法之一来完成这项任务。
- 方法1:使用
random.choice()和items() - 方法2:使用
random.choice()和keys() - 方法3:使用
random.choice()和values() - 方法4:使用
sample() - 方法5:使用
np.random.choice()
准备工作
本文在每个例子中都使用了 random库的每个例子。为了使这些代码样本运行无误,请在每个例子的顶部添加以下代码段。
import random
方法1:使用 random.choice() 和 items()
这个例子使用 random.choice()和 items()来生成一个随机的字典key:value对。
el_list = list(els.items())
random_el = random.choice(el_list)
print(random_el)
上面的代码将周期表元素字典转换为图元列表,并将其保存到el_list 。如果输出到终端,el_list 的内容包含以下内容。
[('Hydrogen', 'H'), ('Helium', 'He'), ('Lithium', 'Li'), ('Beryllium', 'Be'), ('Boron', 'B'), ('Carbon', 'C'), ('Nitrogen', 'N'), ('Oxygen', 'O'), ('Fluorine', 'F'), ('Neon', 'Ne'), ('Sodium', 'Na'), ('Magnesium', 'Mg'), ('Aluminum', 'Al'), ('Silicon', 'Si'), ('Phosphorus', 'P'), ('Sulfur', 'S'), ('Chlorine', 'Cl'), ('Argon', 'Ar'), ('Potassium', 'K'), ('Calcium', 'Ca'), ('Scandium', 'Sc'), ('Titanium', 'Ti'), ('Vanadium', 'V'), ('Chromium', 'Cr'), ('Manganese', 'Mn')]
下一步。 random.choice()被调用并传递了一个(1)参数:el_list 。
结果从图元列表中返回一个随机的 [Tuple](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/) 的列表,保存到random_el ,并被输出到终端。
('Oxygen', 'O') |
这段代码可以精简为以下内容。
random_el = random.choice(list(els.items()))
方法2:使用 random.choice() 和 keys()
这个例子使用 random.choice()和 keys()来生成一个随机的字典key.
random_el = random.choice(list(els.keys()))
print(random_el)
上述代码调用 random.choice()并传给它一个参数:els Dictionary的键,转换成Tuples的列表。
其结果返回一个随机的 钥匙,保存到random_el ,并输出到终端。
Beryllium |
方法3:使用 random.choice() 和 dict.values()
这个例子使用 random.choice()和 values()来生成一个随机的字典值.
random_el = random.choice(list(els.values()))
print(random_el)
上述代码调用 random.choice()并传给它一个(1)参数:els Dictionary的键,转换为一个 List of Tuples.
结果返回一个随机的 价值,保存到random_el ,并输出到终端。
Si |
方法4:使用sample()
from random import sample
random_el = sample(list(els), 1)
print(random_el)
上述代码要求 sample要从库中导入 random库中导入。
然后。 sample()被调用并传递两(2)个参数:els 转换为一个 List of Tuples和要返回的随机数 键要返回。
结果保存到random_el ,并输出到终端。
['Carbon'] |
方法5:使用np.random.choice()
这个例子使用NumPy和 np.random.choice()来生成一个随机字典键.
在继续前进之前,请确保NumPy库已经安装。如果你需要说明,请点击这里。
import numpy as np
random_el = np.random.choice(list(els), 1)
print(random_el)
这段代码导入了上面安装的NumPy库。
然后。[`np.random.choice()`](https://blog.finxter.com/python-random-seed-a-deep-dive/)被调用并传递了两个参数:els ,转换为Tuples的列表,以及随机的 钥匙的数量来返回。
结果保存到random_el ,并输出到终端。
['Chromium' 'Silicon' 'Oxygen'] |
注意:[`np.random.choice()`](https://blog.finxter.com/python-random-seed-a-deep-dive/)有一个额外的参数可以被传递。这个参数是一个 List包含相关的概率。
奖励
这段代码从一个图元列表中生成一个随机的键:值对。当老师运行这段代码时,屏幕上会显示一个随机问题,并等待学生回答。按1来显示答案,按2来退出。
import keyboard
import random
import time
els = {'Hydrogen': 'H', 'Helium': 'He', 'Lithium': 'Li', 'Beryllium': 'Be', 'Boron': 'B', 'Carbon': 'C',
'Nitrogen': 'N', 'Oxygen': 'O', 'Fluorine': 'F', 'Neon': 'Ne', 'Sodium': 'Na', 'Magnesium': 'Mg',
'Aluminum': 'Al', 'Silicon': 'Si', 'Phosphorus': 'P', 'Sulfur': 'S', 'Chlorine': 'Cl',
'Argon': 'Ar', 'Potassium': 'K', 'Calcium': 'Ca', 'Scandium': 'Sc', 'Titanium': 'Ti', 'Vanadium': 'V',
'Chromium': 'Cr', 'Manganese': 'Mn'}
print ('1 Answer 2 quit')
def quiz():
while(True):
k, v = random.choice(list(els.items()))
print(f'\nWhat is the Symbol for {k}?')
pressed = keyboard.read_key()
if pressed == '1':
print(f'The answer is {v}!')
elif pressed == '2':
print("Exiting\n")
exit(0)
time.sleep(5)
quiz()
摘要
本文提供了(5)种从字典中获取随机条目的方法,以选择最适合您的编码要求。
祝您好运,编码愉快!