如何利用python从字典中获得一个随机条目

282 阅读4分钟

问题的提出和解决方案概述

本文将向你展示如何在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'}

💬 问题:我们如何编写代码来从字典中获得一个随机条目?

我们可以通过以下方法之一来完成这项任务。


准备工作

本文在每个例子中都使用了 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()

这个例子使用 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)种从字典中获取随机条目的方法,以选择最适合您的编码要求。

祝您好运,编码愉快!