page contents

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

字典作为Python中最常使用的数据类型,大家几乎每个人都或多或少在项目中使用过字典,但是字典里有一些潜在的技巧可能并不是每个同学都会用到。在本文中,我们将深入探讨七个关于字典的使用技巧,希望可以帮助到大家!

attachments-2024-07-AjN8ggGa668e332985e7c.jpgPython是我最喜欢的编程语言之一,它向来以其简单性、多功能性和可读性而闻名。字典作为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中字典的七种有趣小技巧,使用这些技巧,可以快速提升大家的编码能力。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-07-10 15:07
  • 阅读 ( 63 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1470 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章