关于Python中的字典你所不知道的七个技巧

01

引言

Python是我最喜欢的编程语言之一,它向来以其简单性、多功能性和可读性而闻名。

字典作为Python中最常使用的数据类型,大家几乎每个人都或多或少在项目中使用过字典,但是字典里有一些潜在的技巧可能并不是每个同学都会用到。

在本文中,我们将深入探讨七个关于字典的使用技巧,希望可以帮助到大家!

02

初始化技巧

如果让大家创建一个字典,大家可能80%都会直接选择{}来进行创建,代码示例如下:

# normal way of creating a dictionary``   ``d = {'apple':4, 'orange':5, 'pear':6, 'pineapple':7}

这里推荐大家直接使用 dict(key=value)的方式来创建字典,代码如下:

# 'better' way to creating same dictionary``   ``d = dict(apple=4, orange=5, pear=6, pineapple=7)

虽然两者实现了相同的功能,但是为什么第二种方式更好呢?

  • 使用 {} 创建字典时,我们需要在字符串的键上加上引号来说明我们key的数据类型为字符串;由于我们有很多元素,所以我们就需要不断输入新的引号;而我们第二种方式下,则不需要输入引号。

  • dict方法不适用于非字符串的键,因此这两种方式都有其具体使用的场合。

03

字典合并

这里推荐大家使用解包符号******来进行两个字典的合并,代码如下:

# here are 2 dicts``a = {1:1, 2:2}``b = {3:3, 4:4}``   ``# we can combine them using **``x = {**a, **b}``print(x) # {1:1, 2:2, 3:3, 4:4}

上述代码中的 ** 会将键值对解包到父字典中,我们也可以在组建新字典的时候添加新的键值对,代码如下:

# we can add normal key-value pairs too``a = {1:1, 2:2}``b = {3:3, 4:4}``   ``x = {**a, **b, 5:5}``print(x) # {1:1, 2:2, 3:3, 4:4, 5:5}

04

字典作为函数参数传递

我们可以使用**将字典作为函数关键字参数进行传递,我们来举个简单的例子,一般的函数调用如下:

# a function that takes in a, b, c``   ``def test(a, b, c):`    `print(a, b, c)``   ``test(a=1, c=2, b=3) # 1 3 2

我们也可以将包含key为 a、b 和 c 的字典动态地传入该函数,如下:

mydict = dict(a=1, b=2, c=3)``print(mydict) # {'a':1, 'b':2, 'c':3}``   ``# this is the same as test(a=1, b=2, c=3)``test(**mydict) # 1 2 3

上述代码中,我们使用 ** 进行字典解包,并将解包后相应的参数传递给对应的函数。

05

字典生成式

假设我们要创建以下字典 {1:1, 2:4, 3:9, 4:16},代码如下:

# normal way to create this``   ``d = {}``for i in range(1, 5):`    `d[i] = i**2``   ``print(d) # {1: 1, 2: 4, 3: 9, 4: 16}

使用字典生成式的代码如下:

# dict comprehension way to create this``   ``d = {i:i**2 for i in range(1, 5)}``   ``print(d) # {1:1, 2:4, 3:9, 4:16}

这两种方法都是正确和合法的。但要注意的是,字典生成式理解起来要优雅得多、读起来也容易得多。

我们再来看个嵌套字典的例子,一般写法如下:

# nested for loops``   ``d = {}``for i in range(2):`    `for j in range(2, 4):`        `d[(i,j)] = 0``   ``print(d)``   ``# {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0}

更优雅的写法如下:

# nested for loops in dict comprehension``   ``d = {(i,j):0 for i in range(2) for j in range(2, 4)}``   ``print(d)``   ``# {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0}

06

获取默认值

当我们访问一个不存在的键时,我们会得到 KeyError,如下:

d = {1:1, 2:2, 3:3}``   ``print(d[1])  # 1``print(d[4])  # KeyError

如果我们真的不希望出现 KeyError,则推荐使用字典中的get() 方法,如果键不存在,则返回 None。

# using .get()``   ``d = {1:1, 2:2, 3:3}``   ``print(d.get(1))  # 1``print(d.get(4))  # None

注意到上述代码中,我们得到的不是KeyError,而是None。

更进一步,我们也可以指定返回的默认值,代码如下:

# .get() but with custom default value``   ``d = {1:1, 2:2, 3:3}``   ``print(d.get(1, 100))    # 1``print(d.get(4, 100))    # 100``print(d.get(9, 100))    # 100

07

使用元组列表来创建字典

假设我们有以下元组构成的列表,示例如下:

# a list of tuples (of length 2)``   ``ls = [('apple', 4), ('orange', 5), ('pear', 6)]

则可使用以下技巧生成字典,代码如下:

# we can pass this into dict() to create a dict``   ``d = dict(ls)``print(d)  # {'apple': 4, 'orange': 5, 'pear': 6}

这对快速从元组创建字典非常有用,无需编写字典生成式。

08

遍历字典

假设我们有以下字典,如下:

# a dict``d = dict(apple=4, orange=5, pear=6)``   ``print(d) # {'apple':4, 'orange':5, 'pear':6}

当我们遍历 dict 本身时,我们则会生成所有 dict的键:

for k in d:`    `print(k)``   ``# apple``# orange``# pear

同时,我们也可以使用函数values()来访问字典dict中所有的值,如下:

for v in d.values():`    `print(v)``   ``# 4``# 5``# 6

此外,如果我们使用函数items(),则键和值都会生成一个元组,如下:

for k,v in d.items():`    `print(k, v)``   ``# apple 4``# orange 5``# pear 6

我自己认为函数items() 是最有用的方法,可以快速遍历字典中的所有键值对。

09

总结

本文介绍了Python中字典的七种有趣小技巧,使用这些技巧,可以快速提升大家的编码能力。

您学废了吗?

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值