网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
print(dict1[‘name’]) # 输出 Tom
需要注意的是,如果使用不存在的键来访问字典中的值,将会引发KeyError异常。可以使用get()方法来避免这种情况的发生,如果键不存在,则返回None或指定的默认值:
print(dict1.get(‘address’)) # 输出 None
print(dict1.get(‘address’, ‘unknown’)) # 输出 unknown
#### 1.3.4 遍历字典
可以使用for循环继续遍历字典:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
遍历键
for key in dict1:
print(key)
遍历值
for value in dict1.values():
print(value)
遍历键值对
for key, value in dict1.items():
print(key, value)
### 1.4 字典的基本方法
#### 1.4.1 keys()
keys()方法返回字典中所有键的列表:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
print(dict1.keys()) # 输出 dict_keys([‘name’, ‘age’, ‘gender’])
需要注意的是,keys()方法返回的是dict\_keys类型的对象,而非列表类型,但是可以像列表一样使用。
#### 1.4.2 values()
values()方法返回字典中所有值的列表:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
print(dict1.values()) # 输出 dict_values([‘Tom’, 18, ‘male’])
同样,values()方法返回的是dict\_values类型的对象,而非列表类型,但是可以像列表一样使用。
#### 1.4.3 items()
items()方法返回字典中所有键值对的列表,每个键值对以元组的形式呈现:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
print(dict1.items()) # 输出 dict_items([(‘name’, ‘Tom’), (‘age’, 18), (‘gender’, ‘male’)])
同样,items()方法返回的是dict\_items类型的对象,而非列表类型,但是可以像列表一样使用。
#### 1.4.4 pop()
pop()方法可以从字典中删除指定的键值对,并返回对应的值,如果键不存在,则返回指定的默认值:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
value = dict1.pop(‘age’)
print(value) # 输出 18
print(dict1) # 输出 {‘name’: ‘Tom’, ‘gender’: ‘male’}
#### 1.4.5 popitem()
popitem()方法可以随机删除字典中的一个键值对,并返回对应的键和值:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
key, value = dict1.popitem()
print(key, value) # 输出 gender male
print(dict1) # 输出 {‘name’: ‘Tom’, ‘age’: 18}
#### 1.4.6 update()
update()方法可以将一个字典中的元素添加到另一个字典中,如果有相同的键,则用新字典中的值覆盖原字典中的值:
dict1 = {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘male’}
dict2 = {‘name’: ‘Jerry’, ‘email’: ‘jerry@example.com’}
dict1.update(dict2)
print(dict1) # 输出{‘name’: ‘Jerry’, ‘age’: 18, ‘gender’: ‘male’, ‘email’: ‘jerry@example.com’}
### 1.5 实操案例代码
#### 1.5.1 案例一:统计字符串中每个字符出现的次数
def count_char(str1):
char_dict = {}
for char in str1:
if char in char_dict:
char_dict[char] += 1
else:
char_dict[char] = 1
return char_dict
str1 = ‘hello, world!’
print(count_char(str1))
输出 {‘h’: 1, ‘e’: 1, ‘l’: 3, ‘o’: 2, ‘,’: 1, ’ ': 1, ‘w’: 1, ‘r’: 1, ‘d’: 1, ‘!’: 1}
#### 1.5.2 案例二:合并多个字典
dict1 = {‘name’: ‘Tom’, ‘age’: 18}
dict2 = {‘gender’: ‘Male’}
dict3 = {‘email’: ‘tom@example.com’}
dict4 = {}
for d in (dict1, dict2, dict3):
dict4.update(d)
print(dict4)
输出 {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘Male’, ‘email’: ‘tom@example.com’}
#### 1.5.3 案例三:根据字典中的值对字典排序
def sort_dict(dict1):
dict2 = {k: v for k, v in sorted(dict1.items(), key=lambda item: item[1])}
return dict2
dict1 = {‘Tom’: 75, ‘Jerry’: 90, ‘Alice’: 80, ‘Bob’: 85}
print(sort_dict(dict1))
输出 {‘Tom’: 75, ‘Alice’: 80, ‘Bob’: 85, ‘Jerry’: 90}
#### 1.5.4 将列表转换为字典
keys = [‘name’, ‘age’, ‘gender’]
values = [‘Tom’, 18, ‘Male’]
dict1 = dict(zip(keys, values))
print(dict1)
输出 {‘name’: ‘Tom’, ‘age’: 18, ‘gender’: ‘Male’}
#### 1.5.5 使用字典实现一个简单的缓存
def fibonacci(n):
if n in cache:
return cache[n]
if n < 2:
result = n
else:
result = fibonacci(n - 1) + fibonacci(n - 2)
cache[n] = result
return result
### 1.6 字典的排序方法,升序以及降序
**对于字典的排序,可以使用内置的 sorted() 函数或 sorted() 方法来实现,也可以使用 collections.OrderedDict 类来保持排序顺序。**
下面分别介绍这些方法的升序和降序排序。
#### 1.6.1 使用内置函数 sorted() 进行排序
使用内置函数 sorted() 可以对字典进行排序。默认情况下,sorted() 按照字典中的键进行升序排序。可以使用 reverse=True 参数来实现降序排序。
升序排序
d = {‘b’: 2, ‘a’: 1, ‘c’: 3}
sorted_d = sorted(d.items())
print(sorted_d) # [(‘a’, 1), (‘b’, 2), (‘c’, 3)]
降序排序
sorted_d_desc = sorted(d.items(), reverse=True)
print(sorted_d_desc) # [(‘c’, 3), (‘b’, 2), (‘a’, 1)]
#### 1.6.2 使用字典的 sorted() 方法进行排序
使用字典的 sorted() 方法可以按照字典中的键或值进行排序。与 sorted() 函数一样,该方法默认按照字典中的键进行升序排序,并且可以使用 reverse=True 参数来实现降序排序。
![img](https://img-blog.csdnimg.cn/img_convert/a512a987f2a9365e16d5c73cdc74bc98.png)
![img](https://img-blog.csdnimg.cn/img_convert/3d1d03dddcc0b3af6cec77ac22d00957.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
1715372007928)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**