欢迎访问宙启技术站
智能推送

字典推导式的用法

发布时间:2023-06-25 15:21:57

字典推导式是Python中一种快速、便捷创建字典的方法,通常适用于从序列或其他可迭代对象中生成字典时使用。与列表推导式类似,字典推导式使用一些表达式和一个可迭代对象来创建字典。

字典推导式的语法如下:

{key:value for item in iterable}

其中,key代表字典中每个元素的键,value代表每个元素对应的值,item则代表可迭代对象内部的元素。

例如以下代码,使用字典推导式创建一个简单的字典:

numbers = [1, 2, 3, 4, 5]
squares = {num:num**2 for num in numbers}
print(squares)

输出结果为:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

这段代码首先定义了一个包含五个元素的列表numbers, 然后使用字典推导式创建了一个新的字典squares。推导式的执行过程如下:

1. 对于numbers列表中的每个元素num,使用num作为字典中的键。

2. 对于每个键num,使用表达式 num**2计算其对应的值,并将其赋值为该键对应的字典值。

可以看到,通过使用字典推导式,可以很轻松、清晰地创建出一个字典。

下面让我们详细地介绍字典推导式的使用方法:

一、使用字典推导式创建简单字典

对于简单的字典,可使用基本的字典推导式语法来创建,例如:

new_dict = {key:value for key,value in zip(['a', 'b', 'c'], [1, 2, 3])}
print(new_dict)

输出结果为:{'a': 1, 'b': 2, 'c': 3}

这里我们使用zip内置函数将两个列表合并,并用键值对表示为一个元素。然后使用推导式的语法,将zip函数返回的每个元素作为参数,生成字典。所以在代码中key表示字典中每个元素的键,value代表每个元素对应的值。

二、使用if判断语句

字典推导式也可以嵌套if判断语句,以筛选、选择需要的元素。例如:

numbers = [1, 2, 3, 4, 5]
odd_squares = {num:num**2 for num in numbers if num % 2 != 0}
print(odd_squares)

输出结果为:{1: 1, 3: 9, 5: 25}

这里使用了if条件判断语句来筛选numbers列表中的奇数元素,并只记录它们的平方。

三、使用嵌套的字典推导式

可以使用嵌套的字典推导式在字典中嵌套字典。

例如:

outer_dict = {key:{key1:value1 for key1 in range(1, 4)} for key, value1 in zip(['a', 'b', 'c'], [1, 2, 3])}
print(outer_dict)

输出结果为:

{
    'a': {1: 1, 2: 1, 3: 1}, 
    'b': {1: 2, 2: 2, 3: 2}, 
    'c': {1: 3, 2: 3, 3: 3}
}

这里我们使用了两个for语句嵌套,生成一个字典内含3个字典。内部的字典用for语句生成,外部字典中的值则是用zip函数生成的。

四、使用函数解析操作

除了使用if判断语句来筛选字典中的元素以外,也可以使用函数解析操作(function parsing)来处理字典中的元素。例如,我们可以使用random模块生成一个字典,其中的值是在定义域(domain)内随机选择的:

import random
d={i: random.randint(0,10) for i in range(1,11)}
print(d)

输出结果为:{1: 1, 2: 4, 3: 2, 4: 6, 5: 2, 6: 8, 7: 8, 8: 10, 9: 2, 10: 3}

这里我们使用了random模块内的randint函数将值生成随机数。

五、使用label语句

Python语言中的Label标记用于跳出循环并继续执行代码的下一个部分。在字典解析中,可以使用标记来跳过某些元素。例如,我们使用以下代码过滤字典数据,并跳过值>2的数据:

d={1: 1,2: 2,3: 3,4: 4,5: 5,6: 6}
filtered_dict_01={k:v for k,v in d.items() if v<=2}
print(filtered_dict_01)

# 使用label语句
filtered_dict_02=dict()
for k,v in d.items():
    if v>2: continue
    filtered_dict_02[k]=v
print(filtered_dict_02)

输出结果为:

{1: 1, 2: 2}
{1: 1, 2: 2}

这里 个filtered_dict_01变量是使用标准字典解析生成的,而第二个filtered_dict_02变量使用forif的标准流程来过滤字典项。

由于标记允许我们跳过某些元素,因此在大型或复杂的字典操作中,使用此技巧来削减字典的大小会非常有效。

总而言之,字典推导式是一种方便、高效的方法,能够让Python开发人员更加容易地从序列或其他可迭代对象创建出字典来。对于简单的字典,可以使用基本的字典推导式语法来创建;如果需要筛选、选择需要的元素,则可以嵌套if判断语句;想要嵌套字典,则可以使用嵌套的字典推导式;可以使用函数解析操作来处理字典中的元素;如果需要跳过某些元素,则可以使用label语句。熟练掌握这些技巧可以帮助Python开发人员更加高效地开发出高质量的代码。