從增刪改查到遍歷嵌套詳解Python中字典操作的完全指南
1. 前置知識(shí)點(diǎn)
我們?cè)谏钊雽W(xué)習(xí) Python 字典之前,需要先了解以下基礎(chǔ)概念:
- 變量(variable):用于存儲(chǔ)數(shù)據(jù)的容器,就像生活中的 盒子,可以在里面存放不同的物品
- 數(shù)據(jù)類型(data type):Python 中的基本數(shù)據(jù)類型包括整數(shù)、浮點(diǎn)數(shù)、字符串等
- 鍵值對(duì)(key-value pair):一種數(shù)據(jù)結(jié)構(gòu),由唯一的鍵(key)和對(duì)應(yīng)的值(value)組成
- 哈希表(hash table):字典的底層數(shù)據(jù)結(jié)構(gòu),提供快速的查找性能
學(xué)習(xí)建議:我們需要掌握了 Python 變量和基本數(shù)據(jù)類型后,就可以開始學(xué)習(xí)字典了。字典是 Python 最常用的數(shù)據(jù)結(jié)構(gòu)之一,是后續(xù)學(xué)習(xí) JSON、API 響應(yīng)處理等內(nèi)容的基礎(chǔ)。
2. 什么是字典(Dictionary)
我們接下來(lái)要學(xué)習(xí)的字典(Dictionary)是 Python 中最核心的映射類型數(shù)據(jù)結(jié)構(gòu) ,它以 鍵值對(duì)(key-value pairs) 的形式存儲(chǔ)數(shù)據(jù),提供高效的查找能力 。我們可以把它想象成生活中的 通訊錄 ——通過(guò)姓名(鍵)快速找到對(duì)應(yīng)的電話號(hào)碼(值),而不是像列表那樣需要記住電話號(hào)碼在第幾位。
2.1 字典的核心特點(diǎn)
我們需要掌握字典的幾個(gè)重要特點(diǎn):
- 鍵值對(duì)結(jié)構(gòu):每個(gè)元素都是一個(gè)鍵值對(duì),由唯一的鍵(key)和對(duì)應(yīng)的值(value)組成
- 通過(guò)鍵訪問:我們使用鍵來(lái)存取值,而不是通過(guò)位置索引(如列表的 0、1、2)
- 可變性:字典是可變的,我們可以隨時(shí)添加、修改或刪除鍵值對(duì)
- 無(wú)序性:字典中的元素沒有固定的順序(Python 3.7+ 保持插入順序,但邏輯上仍視為無(wú)序)
- 鍵的唯一性:字典中的鍵必須是唯一的,不能重復(fù)
- 鍵的可哈希性:作為字典的鍵,必須是可哈希(hashable)的類型
什么是可哈希(Hashable)
我們?cè)谑褂米值鋾r(shí),需要注意一個(gè)重要概念:可哈希(hashable)??晒J侵敢粋€(gè)對(duì)象在它的生命周期內(nèi),哈希值(hash value)是固定的。Python 使用哈希值來(lái)快速查找字典中的鍵,所以我們需要使用可哈希的對(duì)象作為字典的鍵。
可哈希的類型(可以作為字典的鍵)
我們需要知道,以下類型是可以作為字典的鍵的:
| 類型 | 說(shuō)明 | 示例 |
|---|---|---|
| 整數(shù)(int) | 數(shù)字類型都是可哈希的 | 1, 100, -5 |
| 浮點(diǎn)數(shù)(float) | 浮點(diǎn)數(shù)也是可哈希的 | 3.14, 2.5 |
| 字符串(str) | 字符串是不可變的,所以可哈希 | "name", "key1" |
| 布爾值(bool) | True 和 False 都是可哈希的 | True, False |
| 元組(tuple) | 元組是不可變的,但要求其中的元素也必須可哈希(原因見下文) | (1, 2), ("a", "b") |
| frozenset | 凍結(jié)集合,不可變的集合 | frozenset([1, 2, 3]) |
為什么元組內(nèi)的元素也必須是可哈希的?
雖然元組本身是不可變的,但 Python 在計(jì)算元組的哈希值時(shí),會(huì)遞歸地計(jì)算元組內(nèi)所有元素的哈希值。如果元組內(nèi)包含不可哈希的元素(比如列表),Python 就無(wú)法計(jì)算整個(gè)元組的哈希值,因此這個(gè)元組就不能作為字典的鍵。我們需要注意這一點(diǎn)。
舉個(gè)例子:
# ? 合法:元組內(nèi)所有元素都是可哈希的
locations = {
(35.68, 139.69): "東京", # 元組內(nèi)是兩個(gè)浮點(diǎn)數(shù)
(40.71, -74.01): "紐約" # 元組內(nèi)是兩個(gè)浮點(diǎn)數(shù)
}
# ? 非法:元組內(nèi)包含列表(不可哈希)
locations = {
([35.68, 139.69]): "東京" # TypeError: unhashable type: 'list'
}
原理:字典使用哈希表來(lái)存儲(chǔ)鍵值對(duì),當(dāng)添加一個(gè)鍵時(shí),Python 會(huì)先計(jì)算這個(gè)鍵的哈希值,然后根據(jù)哈希值確定存儲(chǔ)位置。如果鍵本身或它的任何組成部分是可變的,哈希值就可能改變,這會(huì)導(dǎo)致字典無(wú)法正確找到對(duì)應(yīng)的值。
不可哈希的類型(不能作為字典的鍵)
我們需要避免使用以下類型作為字典的鍵:
| 類型 | 原因 | 示例 |
|---|---|---|
| 列表(list) | 列表是可變的,內(nèi)容可能改變 | [1, 2, 3] ? |
| 字典(dict) | 字典是可變的 | {"a": 1} ? |
| 集合(set) | 集合是可變的 | {1, 2, 3} ? |
| 包含可變?cè)氐脑M | 元組中包含不可哈希的元素 | (1, [2, 3]) ? |
如何判斷對(duì)象是否可哈希
我們?cè)趯?shí)際使用中,可以通過(guò)以下方法判斷對(duì)象是否可哈希:
# 方法1:使用 hash() 函數(shù)
print(hash("hello")) # ? 可以,輸出哈希值
print(hash([1, 2, 3])) # ? TypeError: unhashable type: 'list'
# 方法2:使用 isinstance() 檢查
from collections.abc import Hashable
print(isinstance("hello", Hashable)) # ? True
print(isinstance([1, 2, 3], Hashable)) # ? False
2.2 字典 vs 列表對(duì)比
我們?cè)谶x擇數(shù)據(jù)結(jié)構(gòu)時(shí),需要了解字典和列表的區(qū)別:
| 特性 | 字典(dict) | 列表(list) |
|---|---|---|
| 數(shù)據(jù)結(jié)構(gòu) | 鍵值對(duì)(key-value) | 有序序列 |
| 訪問方式 | 通過(guò)鍵訪問 | 通過(guò)索引訪問 |
| 有序性 | 無(wú)序(Python 3.7+保持插入順序) | 有序 |
| 查找性能 | O(1) 常量時(shí)間 | O(n) 線性時(shí)間 |
| 適用場(chǎng)景 | 快速查找、映射關(guān)系 | 順序存儲(chǔ)、遍歷 |
2.3 實(shí)際應(yīng)用場(chǎng)景
我們?cè)趯?shí)際開發(fā)中經(jīng)常會(huì)用到字典,以下是常見的應(yīng)用場(chǎng)景:
- 快速查詢:字典提供 O(1) 的平均時(shí)間復(fù)雜度進(jìn)行查找操作,比列表的 O(n) 快得多。比如查字典、查用戶信息、查配置項(xiàng)等
- 用戶信息存儲(chǔ):用用戶名作為鍵,存儲(chǔ)用戶的年齡、郵箱等信息
- 配置項(xiàng)管理:用配置名稱作為鍵,存儲(chǔ)對(duì)應(yīng)的配置值
- 計(jì)數(shù)統(tǒng)計(jì):統(tǒng)計(jì)單詞出現(xiàn)次數(shù)、商品銷量等
- JSON 數(shù)據(jù)處理:JSON 對(duì)象在 Python 中就是字典類型
學(xué)習(xí)建議:我們需要掌握字典是 Python 最常用的數(shù)據(jù)結(jié)構(gòu)之一,它能讓我們的代碼更高效、更易讀。接下來(lái)我們將學(xué)習(xí)如何創(chuàng)建字典。
3. 字典創(chuàng)建(dict creation)
我們?cè)谇懊媪私饬俗值涞母拍?,現(xiàn)在來(lái)學(xué)習(xí)如何創(chuàng)建字典。字典可以通過(guò)多種方式創(chuàng)建,選擇合適的方法能讓代碼更簡(jiǎn)潔、更高效。本章我們將學(xué)習(xí)三種主要的創(chuàng)建方式。
3.1 基本創(chuàng)建方式
使用花括號(hào){}創(chuàng)建
使用花括號(hào) {} 是創(chuàng)建字典最直接、最常用的方式。在花括號(hào)內(nèi),使用冒號(hào) : 分隔鍵和值,多個(gè)鍵值對(duì)之間用逗號(hào) , 分隔。
# 創(chuàng)建空字典
empty_dict = {}
# 創(chuàng)建帶初始值的字典
student = {
"name": "張三",
"age": 18,
"score": 95
}
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95}
特點(diǎn):
- 語(yǔ)法簡(jiǎn)潔直觀
- 適合創(chuàng)建時(shí)已知所有鍵值對(duì)的場(chǎng)景
- 花括號(hào)是字典的標(biāo)志性符號(hào),一眼就能識(shí)別
使用 dict() 構(gòu)造函數(shù)創(chuàng)建
dict() 是 Python 的內(nèi)置構(gòu)造函數(shù),提供了另一種創(chuàng)建字典的方式。
# 創(chuàng)建空字典
empty_dict = dict()
# 使用關(guān)鍵字參數(shù)創(chuàng)建
student = dict(name="李四", age=20, score=88)
print(student) # 輸出: {'name': '李四', 'age': 20, 'score': 88}
# 從鍵值對(duì)序列創(chuàng)建
pairs = [("name", "王五"), ("age", 22), ("score", 92)]
student = dict(pairs)
print(student) # 輸出: {'name': '王五', 'age': 22, 'score': 92}
# 從另一個(gè)字典創(chuàng)建
original = {"a": 1, "b": 2}
copy_dict = dict(original)
print(copy_dict) # 輸出: {'a': 1, 'b': 2}
特點(diǎn):
- 適合從其他數(shù)據(jù)結(jié)構(gòu)(如列表、元組)轉(zhuǎn)換而來(lái)
- 使用關(guān)鍵字參數(shù)時(shí),鍵必須是字符串
- 可以從現(xiàn)有的字典復(fù)制創(chuàng)建新字典
使用 fromkeys() 方法創(chuàng)建
fromkeys() 是 dict 類的類方法,用于創(chuàng)建一個(gè)新字典,將所有鍵設(shè)置為相同的默認(rèn)值。
# 創(chuàng)建所有鍵值都為 None 的字典
keys = ["name", "age", "score"]
student = dict.fromkeys(keys)
print(student) # 輸出: {'name': None, 'age': None, 'score': None}
# 創(chuàng)建所有鍵值都為指定默認(rèn)值的字典
student = dict.fromkeys(keys, 0)
print(student) # 輸出: {'name': 0, 'age': 0, 'score': 0}
特點(diǎn):
- 適合需要初始化多個(gè)鍵為相同默認(rèn)值的場(chǎng)景
- 如果不指定默認(rèn)值,默認(rèn)為
None - 所有鍵共享同一個(gè)默認(rèn)值對(duì)象(注意可變對(duì)象的引用問題)
字典創(chuàng)建方式對(duì)比
| 創(chuàng)建方式 | 適用場(chǎng)景 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|---|
{} | 已知所有鍵值對(duì) | 語(yǔ)法簡(jiǎn)潔、性能好 | 鍵必須是字面量 |
dict() | 從其他數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換 | 靈活、可讀性好 | 語(yǔ)法稍復(fù)雜 |
fromkeys() | 初始化多個(gè)鍵為相同值 | 簡(jiǎn)潔高效 | 所有鍵值相同 |
3.2 字典推導(dǎo)式創(chuàng)建
字典推導(dǎo)式(Dictionary Comprehension)是 Python 中一種簡(jiǎn)潔高效的語(yǔ)法結(jié)構(gòu),用于通過(guò)表達(dá)式快速生成字典 ??。它將"遍歷、計(jì)算與構(gòu)造"濃縮成一行表達(dá)式,是 Pythonic 代碼的代表寫法之一。
基本語(yǔ)法
字典推導(dǎo)式的基本語(yǔ)法如下:
{key: value for item in iterable}
key:生成字典的鍵value:生成字典的值item:遍歷的元素iterable:可迭代對(duì)象
基礎(chǔ)示例
# 示例1:從列表創(chuàng)建字典(鍵為數(shù),值為數(shù)的平方)
squares = {x: x**2 for x in range(5)}
print(squares) # 輸出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 示例2:將兩個(gè)列表組合成字典
keys = ["name", "age", "city"]
values = ["張三", 25, "北京"]
person = dict(zip(keys, values))
print(person) # 輸出: {'name': '張三', 'age': 25, 'city': '北京'}
# 示例3:將字符串轉(zhuǎn)換為字符計(jì)數(shù)字典
word = "hello"
char_count = {char: word.count(char) for char in word}
print(char_count) # 輸出: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
帶條件的字典推導(dǎo)式
可以在推導(dǎo)式中添加條件來(lái)過(guò)濾元素:
# 示例1:只保留偶數(shù)的平方
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares) # 輸出: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# 示例2:根據(jù)條件轉(zhuǎn)換數(shù)據(jù)
scores = {"語(yǔ)文": 85, "數(shù)學(xué)": 92, "英語(yǔ)": 78, "物理": 90}
pass_scores = {subject: score for subject, score in scores.items() if score >= 80}
print(pass_scores) # 輸出: {'語(yǔ)文': 85, '數(shù)學(xué)': 92, '物理': 90}
復(fù)雜的字典推導(dǎo)式
# 示例1:嵌套循環(huán)創(chuàng)建字典
pairs = {(x, y): x + y for x in range(3) for y in range(3)}
print(pairs) # 輸出: {(0, 0): 0, (0, 1): 1, (0, 2): 2, (1, 0): 1, ...}
# 示例2:使用條件表達(dá)式(三元運(yùn)算符)
numbers = [1, 2, 3, 4, 5]
label = {n: "偶數(shù)" if n % 2 == 0 else "奇數(shù)" for n in numbers}
print(label) # 輸出: {1: '奇數(shù)', 2: '偶數(shù)', 3: '奇數(shù)', 4: '偶數(shù)', 5: '奇數(shù)'}
# 示例3:從字典推導(dǎo)新字典
original = {"a": 1, "b": 2, "c": 3}
doubled = {k: v * 2 for k, v in original.items()}
print(doubled) # 輸出: {'a': 2, 'b': 4, 'c': 6}
字典推導(dǎo)式 vs 傳統(tǒng)循環(huán)對(duì)比
| 寫法 | 示例 | 優(yōu)點(diǎn) |
|---|---|---|
| 字典推導(dǎo)式 | {x: x**2 for x in range(5)} | 簡(jiǎn)潔、可讀性好、性能好 |
| 傳統(tǒng)循環(huán) | squares = {} + for x in range(5): + squares[x] = x**2 | 易于理解、適合復(fù)雜邏輯 |
學(xué)習(xí)建議:字典推導(dǎo)式是 Python 的特色語(yǔ)法,建議熟練掌握。它的語(yǔ)法和列表推導(dǎo)式類似,學(xué)會(huì)一個(gè)就能輕松上手另一個(gè)。
4. 字典查詢(finding elements)
我們?cè)谇懊鎸W(xué)習(xí)了如何創(chuàng)建字典,現(xiàn)在來(lái)學(xué)習(xí)如何查詢字典中的數(shù)據(jù)。字典的查詢操作是使用字典的核心目的。字典之所以高效,正是因?yàn)樗梢酝ㄟ^(guò)鍵快速找到對(duì)應(yīng)的值,而不需要像列表那樣遍歷查找。本章我們將學(xué)習(xí)字典的幾種查詢方式。
4.1 通過(guò)鍵獲取值
最直接的查詢方式是使用方括號(hào) [] 加鍵名來(lái)獲取對(duì)應(yīng)的值。
# 創(chuàng)建字典
student = {"name": "張三", "age": 18, "score": 95}
# 通過(guò)鍵獲取值
print(student["name"]) # 輸出: 張三
print(student["age"]) # 輸出: 18
print(student["score"]) # 輸出: 95
注意:如果鍵不存在,使用 [] 會(huì)拋出 KeyError 異常。
# 鍵不存在時(shí),會(huì)報(bào)錯(cuò) print(student["gender"]) # ? KeyError: 'gender'
4.2 get() 方法
為了避免 KeyError 異常,字典提供了 get() 方法。當(dāng)鍵不存在時(shí),它會(huì)返回 None(或者指定的默認(rèn)值),而不是拋出異常。
student = {"name": "張三", "age": 18, "score": 95}
# 使用 get() 方法獲取值
print(student.get("name")) # 輸出: 張三
print(student.get("gender")) # 輸出: None(鍵不存在)
# 指定默認(rèn)值
print(student.get("gender", "未知")) # 輸出: 未知
get() 方法的特點(diǎn):
- 如果鍵存在,返回對(duì)應(yīng)的值
- 如果鍵不存在,返回
None(或指定的默認(rèn)值) - 不會(huì)拋出異常,代碼更安全
使用場(chǎng)景建議:
- 不確定鍵是否存在時(shí),使用
get()方法 - 需要設(shè)置默認(rèn)值時(shí),使用
get(key, default)
4.3 keys()、values()、items() 方法
這三個(gè)方法用于獲取字典的不同視圖(view),方便遍歷和操作字典。
student = {"name": "張三", "age": 18, "score": 95}
# keys():獲取所有鍵
print(student.keys()) # 輸出: dict_keys(['name', 'age', 'score'])
# values():獲取所有值
print(student.values()) # 輸出: dict_values(['張三', 18, 95])
# items():獲取所有鍵值對(duì)
print(student.items()) # 輸出: dict_items([('name', '張三'), ('age', 18), ('score', 95)])
遍歷示例:
# 遍歷所有鍵
for key in student.keys():
print(key)
# 遍歷所有值
for value in student.values():
print(value)
# 遍歷所有鍵值對(duì)
for key, value in student.items():
print(f"{key}: {value}")
特點(diǎn)說(shuō)明:
- 返回的是視圖對(duì)象,不是列表
- 視圖是動(dòng)態(tài)的:字典改變,視圖也會(huì)跟著變
- 如果需要列表,可以手動(dòng)轉(zhuǎn)換:
list(student.keys())
4.4 in 和 not in 運(yùn)算符
在 Python 中,可以使用 in 和 not in 運(yùn)算符來(lái)檢查鍵是否存在于字典中。這是 Python 官方推薦的檢測(cè)方式,時(shí)間復(fù)雜度為 O(1)。
student = {"name": "張三", "age": 18, "score": 95}
# 檢查鍵是否存在
print("name" in student) # 輸出: True
print("gender" in student) # 輸出: False
# 檢查鍵是否不存在
print("gender" not in student) # 輸出: True
實(shí)際應(yīng)用:
# 場(chǎng)景1:先檢查再獲?。ū苊?KeyError)
if "gender" in student:
print(student["gender"])
else:
print("性別未知")
# 場(chǎng)景2:條件判斷
if "score" in student and student["score"] >= 60:
print("考試及格")
else:
print("需要補(bǔ)考")
in vs get() 對(duì)比:
| 方法 | 適用場(chǎng)景 | 返回值 |
|---|---|---|
in | 只檢查鍵是否存在 | 布爾值 |
get() | 檢查并獲取值 | 值或默認(rèn)值 |
學(xué)習(xí)建議:在實(shí)際開發(fā)中,如果只是檢查鍵是否存在,用 in;如果需要獲取值,用 get() 更安全。
5. 字典增加(adding elements)
我們?cè)谇懊鎸W(xué)習(xí)了如何查詢字典,現(xiàn)在來(lái)學(xué)習(xí)如何向字典中添加新元素。
5.1 直接賦值添加
向字典中添加元素最簡(jiǎn)單的方式是直接通過(guò)鍵賦值。如果鍵不存在,就會(huì)添加新的鍵值對(duì);如果鍵已存在,則會(huì)更新值。
# 創(chuàng)建空字典
student = {}
# 添加單個(gè)鍵值對(duì)
student["name"] = "張三"
student["age"] = 18
student["score"] = 95
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95}
# 多次賦值可以繼續(xù)添加
student["city"] = "北京"
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95, 'city': '北京'}
注意:如果鍵已存在,直接賦值會(huì)覆蓋原來(lái)的值(這屬于修改操作,見第6章)。
特點(diǎn):
- 語(yǔ)法簡(jiǎn)潔,一目了然
- 適合逐個(gè)添加鍵值對(duì)
- 鍵不存在則添加,鍵存在則覆蓋
5.2 setdefault() 方法
setdefault() 方法用于設(shè)置字典的默認(rèn)值。如果鍵不存在,它會(huì)添加鍵并設(shè)置默認(rèn)值;如果鍵已存在,則保持原有值不變。
student = {"name": "張三", "age": 18}
# 鍵不存在,添加新鍵值對(duì)
result = student.setdefault("score", 95)
print(result) # 輸出: 95(返回設(shè)置的值)
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95}
# 鍵已存在,不改變?cè)兄?
result = student.setdefault("name", "李四")
print(result) # 輸出: 張三(返回原有值)
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95}(name 未被修改)
# 只傳一個(gè)參數(shù)時(shí),默認(rèn)值為 None
student.setdefault("address")
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95, 'address': None}
setdefault() 的特點(diǎn):
- 如果鍵不存在,添加鍵并設(shè)置默認(rèn)值
- 如果鍵已存在,返回原有值,不修改字典
- 適合用于初始化字典,確保某個(gè)鍵有默認(rèn)值
實(shí)際應(yīng)用場(chǎng)景:
# 場(chǎng)景1:統(tǒng)計(jì)水果出現(xiàn)次數(shù)
fruits = ["蘋果", "香蕉", "蘋果", "橙子", "香蕉", "蘋果"]
count = {}
for fruit in fruits:
count.setdefault(fruit, 0) # 如果鍵不存在,初始化為 0
count[fruit] += 1 # 然后加 1
print(count) # 輸出: {'蘋果': 3, '香蕉': 2, '橙子': 1}
# 場(chǎng)景2:分組數(shù)據(jù)
students = [
{"name": "張三", "class": "A"},
{"name": "李四", "class": "B"},
{"name": "王五", "class": "A"}
]
groups = {}
for student in students:
cls = student["class"]
groups.setdefault(cls, []).append(student["name"])
print(groups) # 輸出: {'A': ['張三', '王五'], 'B': ['李四']}
5.3 update() 方法
update() 方法用于將另一個(gè)字典或鍵值對(duì)序列合并到當(dāng)前字典中。它可以一次性添加多個(gè)鍵值對(duì),非常適合批量更新字典。
student = {"name": "張三", "age": 18}
# 使用字典更新
student.update({"score": 95, "city": "北京"})
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95, 'city': '北京'}
# 使用關(guān)鍵字參數(shù)更新
student.update(grade="A", status="active")
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95, 'city': '北京', 'grade': 'A', 'status': 'active'}
# 使用鍵值對(duì)序列更新(列表、元組均可)
pairs = [("gender", "男"), ("height", 175)]
student.update(pairs)
print(student) # 輸出: {'name': '張三', 'age': 18, 'score': 95, 'city': '北京', 'grade': 'A', 'status': 'active', 'gender': '男', 'height': 175}
# update() 也會(huì)覆蓋已存在的鍵
student.update({"age": 20, "name": "李四"})
print(student) # 輸出: {'name': '李四', 'age': 20, 'score': 95, ...}
update() 的特點(diǎn):
- 可以一次性添加或更新多個(gè)鍵值對(duì)
- 如果鍵已存在,會(huì)覆蓋原有的值
- 支持多種參數(shù)形式:字典、關(guān)鍵字參數(shù)、鍵值對(duì)序列
對(duì)比總結(jié):
| 方法 | 適用場(chǎng)景 | 鍵存在時(shí)的行為 |
|---|---|---|
dict[key] = value | 添加或修改單個(gè)鍵值對(duì) | 覆蓋原有值 |
setdefault(key, value) | 確保鍵有默認(rèn)值 | 不改變?cè)兄?/td> |
update({...}) | 批量添加或修改 | 覆蓋原有值 |
6. 字典修改(modifying elements)
我們?cè)谇懊鎸W(xué)習(xí)了如何添加元素,現(xiàn)在來(lái)學(xué)習(xí)如何修改字典中已有的值。
6.1 通過(guò)鍵修改值
字典的值可以通過(guò)鍵直接修改。直接賦值時(shí),如果鍵存在,則更新值;如果鍵不存在,則添加新鍵值對(duì)(在第五章中我們學(xué)過(guò),鍵不存在時(shí)就是添加)。
student = {"name": "張三", "age": 18, "score": 95}
# 修改已存在的鍵的值
student["age"] = 20
student["score"] = 88
print(student) # 輸出: {'name': '張三', 'age': 20, 'score': 88}
注意:這里的"修改"和"添加"使用的是同樣的語(yǔ)法,區(qū)別在于鍵是否存在:
- 鍵不存在 → 添加新鍵值對(duì)
- 鍵已存在 → 修改原有值
修改嵌套字典中的值:
# 嵌套字典
user = {
"name": "張三",
"profile": {
"email": "zhangsan@example.com",
"age": 18
}
}
# 修改嵌套字典中的值
user["profile"]["age"] = 20
user["profile"]["email"] = "new_email@example.com"
print(user)
# 輸出: {'name': '張三', 'profile': {'email': 'new_email@example.com', 'age': 20}}
6.2 update() 方法修改
update() 方法不僅可以添加元素(第五章學(xué)過(guò)),還可以用來(lái)修改元素。當(dāng)提供的鍵在字典中已存在時(shí),就會(huì)覆蓋原來(lái)的值。
student = {"name": "張三", "age": 18, "score": 95}
# 使用字典修改多個(gè)值
student.update({"age": 20, "score": 88})
print(student) # 輸出: {'name': '張三', 'age': 20, 'score': 88}
# 使用關(guān)鍵字參數(shù)修改
student.update(age=22, status="graduated")
print(student) # 輸出: {'name': '張三', 'age': 22, 'score': 88, 'status': 'graduated'}
對(duì)比總結(jié):
| 方法 | 適用場(chǎng)景 | 鍵不存在時(shí)的行為 |
|---|---|---|
dict[key] = value | 修改單個(gè)值 | 添加新鍵值對(duì) |
update({key: value}) | 批量修改多個(gè)值 | 添加新鍵值對(duì) |
學(xué)習(xí)建議:字典的"增"和"改"使用相同的語(yǔ)法(直接賦值或 update),區(qū)別在于鍵是否已存在。理解這一點(diǎn),就掌握了字典操作的核心邏輯。
7. 字典刪除(removing elements)
我們?cè)谇懊鎸W(xué)習(xí)了如何添加和修改字典,現(xiàn)在來(lái)學(xué)習(xí)如何刪除字典中的元素。
7.1 pop() 方法
pop() 方法用于刪除指定鍵的鍵值對(duì),并返回對(duì)應(yīng)的值。如果鍵不存在,會(huì)拋出 KeyError 異常。
student = {"name": "張三", "age": 18, "score": 95}
# 刪除鍵值對(duì),并獲取被刪除的值
removed_value = student.pop("age")
print(removed_value) # 輸出: 18
print(student) # 輸出: {'name': '張三', 'score': 95}
# 鍵不存在時(shí),會(huì)拋出 KeyError
# student.pop("gender") # ? KeyError: 'gender'
# 可以設(shè)置默認(rèn)值,避免異常
removed_value = student.pop("gender", None)
print(removed_value) # 輸出: None(鍵不存在,返回默認(rèn)值)
pop() 的特點(diǎn):
- 刪除指定鍵的鍵值對(duì)
- 返回被刪除的值
- 鍵不存在時(shí)拋出異常(可以設(shè)置默認(rèn)值避免)
使用場(chǎng)景:當(dāng)你需要?jiǎng)h除某個(gè)鍵值對(duì),同時(shí)可能需要用到被刪除的值時(shí),使用 pop() 最合適。
7.2 popitem() 方法
popitem() 方法用于刪除字典中最后一個(gè)鍵值對(duì)(Python 3.7+),并以元組形式返回刪除的鍵和值。在 Python 3.7 之前,字典是無(wú)序的,刪除的是任意鍵值對(duì)。
student = {"name": "張三", "age": 18, "score": 95}
# 刪除最后一個(gè)鍵值對(duì)
removed = student.popitem()
print(removed) # 輸出: ('score', 95)(返回鍵值對(duì)元組)
print(student) # 輸出: {'name': '張三', 'age': 18}
# 繼續(xù)刪除
removed = student.popitem()
print(removed) # 輸出: ('age', 18)
print(student) # 輸出: {'name': '張三'}
# 字典為空時(shí),拋出 KeyError
# student.popitem() # ? KeyError: 'popitem(): dictionary is empty'
popitem() 的特點(diǎn):
- 刪除并返回最后一個(gè)鍵值對(duì)(以元組形式)
- Python 3.7+ 保證刪除順序與插入順序一致
- 字典為空時(shí)拋出
KeyError
使用場(chǎng)景:
- 想要按插入順序刪除鍵值對(duì)時(shí)
- 實(shí)現(xiàn) LRU 緩存(最近最少使用)等數(shù)據(jù)結(jié)構(gòu)時(shí)
7.3 del 語(yǔ)句
del 語(yǔ)句用于刪除字典中指定鍵的鍵值對(duì),或者刪除整個(gè)字典。
student = {"name": "張三", "age": 18, "score": 95}
# 刪除指定的鍵值對(duì)
del student["age"]
print(student) # 輸出: {'name': '張三', 'score': 95}
# 刪除不存在的鍵會(huì)拋出異常
# del student["gender"] # ? KeyError: 'gender'
# 刪除整個(gè)字典
del student
# print(student) # ? NameError: name 'student' is not defined
del 的特點(diǎn):
- 刪除指定鍵的鍵值對(duì)
- 可以刪除整個(gè)字典
- 鍵不存在時(shí)拋出
KeyError
使用場(chǎng)景:
- 明確知道要?jiǎng)h除某個(gè)鍵值對(duì)
- 需要完全刪除字典變量時(shí)
7.4 clear() 方法
clear() 方法用于清空字典中的所有鍵值對(duì),使字典變?yōu)榭兆值洹Ec del 不同的是,clear() 只刪除字典中的內(nèi)容,字典變量本身仍然存在。
student = {"name": "張三", "age": 18, "score": 95}
# 清空字典
student.clear()
print(student) # 輸出: {}(空字典)
print(len(student)) # 輸出: 0
# 字典變量仍然存在,可以繼續(xù)使用
student["name"] = "李四"
print(student) # 輸出: {'name': '李四'}
clear() 的特點(diǎn):
- 刪除字典中所有鍵值對(duì)
- 字典變?yōu)榭兆值?
{} - 字典變量本身仍然存在
對(duì)比總結(jié):
| 方法/語(yǔ)句 | 刪除內(nèi)容 | 返回值 | 鍵不存在時(shí) |
|---|---|---|---|
pop(key) | 指定鍵的鍵值對(duì) | 返回被刪除的值 | 拋出 KeyError |
popitem() | 最后一個(gè)鍵值對(duì) | 返回鍵值對(duì)元組 | 拋出 KeyError |
del dict[key] | 指定鍵的鍵值對(duì) | 無(wú)返回值 | 拋出 KeyError |
clear() | 所有鍵值對(duì) | 無(wú)返回值 | 不報(bào)錯(cuò) |
學(xué)習(xí)建議:刪除操作要小心,特別是 del 語(yǔ)句會(huì)直接刪除變量。如果不確定鍵是否存在,我們可以使用 pop(key, default) 設(shè)置默認(rèn)值,避免異常。
8. 字典遍歷(traversing)
我們?cè)谇懊鎸W(xué)習(xí)了字典的增刪改查操作,現(xiàn)在來(lái)學(xué)習(xí)如何遍歷字典中的所有數(shù)據(jù)。
8.1 遍歷鍵
遍歷字典的鍵是最常見的操作之一??梢灾苯颖闅v字典(默認(rèn)遍歷的就是鍵),也可以使用 keys() 方法明確指定遍歷鍵。
student = {"name": "張三", "age": 18, "score": 95, "city": "北京"}
# 方法1:直接遍歷字典(默認(rèn)遍歷鍵)
for key in student:
print(key)
# 輸出:
# name
# age
# score
# city
# 方法2:使用 keys() 方法
for key in student.keys():
print(key)
# 輸出同上
# 在需要明確語(yǔ)義時(shí),使用 keys() 更清晰
print("學(xué)生信息包含以下字段:")
for key in student.keys():
print(f" - {key}")
使用場(chǎng)景:
- 只關(guān)心有哪些鍵(字段名)
- 需要判斷某個(gè)鍵是否存在(結(jié)合
in運(yùn)算符)
8.2 遍歷值
如果只關(guān)心字典中的值,可以使用 values() 方法進(jìn)行遍歷。
student = {"name": "張三", "age": 18, "score": 95, "city": "北京"}
# 遍歷所有值
for value in student.values():
print(value)
# 輸出:
# 張三
# 18
# 95
# 北京
# 實(shí)際應(yīng)用:計(jì)算平均分
scores = {"語(yǔ)文": 85, "數(shù)學(xué)": 92, "英語(yǔ)": 78, "物理": 90}
total = sum(scores.values())
count = len(scores)
average = total / count
print(f"平均分: {average}") # 輸出: 平均分: 86.25
# 找出最高分
max_score = max(scores.values())
print(f"最高分: {max_score}") # 輸出: 最高分: 92
使用場(chǎng)景:
- 只關(guān)心值,不需要鍵
- 統(tǒng)計(jì)、計(jì)算類操作(如求和、平均值、最大值、最小值)
8.3 遍歷鍵值對(duì)
如果需要同時(shí)獲取鍵和值,可以使用 items() 方法,它返回鍵值對(duì)元組。
student = {"name": "張三", "age": 18, "score": 95, "city": "北京"}
# 遍歷所有鍵值對(duì)
for key, value in student.items():
print(f"{key}: {value}")
# 輸出:
# name: 張三
# age: 18
# score: 95
# city: 北京
# 實(shí)際應(yīng)用:篩選符合條件的數(shù)據(jù)
scores = {"語(yǔ)文": 85, "數(shù)學(xué)": 92, "英語(yǔ)": 78, "物理": 90}
print("及格的科目:")
for subject, score in scores.items():
if score >= 80:
print(f" {subject}: {score}分")
# 輸出:
# 及格的科目:
# 語(yǔ)文: 85分
# 數(shù)學(xué): 92分
# 物理: 90分
# 實(shí)際應(yīng)用:構(gòu)建新字典
original = {"a": 1, "b": 2, "c": 3}
doubled = {}
for key, value in original.items():
doubled[key] = value * 2
print(doubled) # 輸出: {'a': 2, 'b': 4, 'c': 6}
使用場(chǎng)景:
- 需要同時(shí)使用鍵和值
- 復(fù)雜的數(shù)據(jù)轉(zhuǎn)換和篩選
8.4 字典推導(dǎo)式遍歷
字典推導(dǎo)式不僅可以創(chuàng)建字典(第三章學(xué)過(guò)),還可以用于遍歷和轉(zhuǎn)換數(shù)據(jù)。它的語(yǔ)法簡(jiǎn)潔,效率也更高。
# 示例1:遍歷鍵值對(duì)并篩選
scores = {"語(yǔ)文": 85, "數(shù)學(xué)": 92, "英語(yǔ)": 78, "物理": 90}
pass_scores = {subject: score for subject, score in scores.items() if score >= 80}
print(pass_scores) # 輸出: {'語(yǔ)文': 85, '數(shù)學(xué)': 92, '物理': 90}
# 示例2:遍歷鍵值對(duì)并轉(zhuǎn)換
student = {"name": "張三", "age": 18, "score": 95}
formatted = {f"學(xué)生{k}": f"值{v}" for k, v in student.items()}
print(formatted) # 輸出: {'學(xué)生name': '值張三', '學(xué)生age': '值18', '學(xué)生score': '值95'}
# 示例3:鍵值互換
original = {"a": 1, "b": 2, "c": 3}
reversed_dict = {v: k for k, v in original.items()}
print(reversed_dict) # 輸出: {1: 'a', 2: 'b', 3: 'c'}
# 示例4:合并兩個(gè)字典(鍵不同時(shí))
dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}
merged = {k: v for d in [dict1, dict2] for k, v in d.items()}
print(merged) # 輸出: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
對(duì)比總結(jié):
| 遍歷方式 | 適用場(chǎng)景 | 示例 |
|---|---|---|
for key in dict | 只遍歷鍵 | 遍歷字段名 |
for key in dict.keys() | 明確遍歷鍵 | 需要鍵的列表 |
for value in dict.values() | 只遍歷值 | 統(tǒng)計(jì)計(jì)算 |
for k, v in dict.items() | 同時(shí)遍歷鍵值 | 數(shù)據(jù)篩選轉(zhuǎn)換 |
| 字典推導(dǎo)式 | 簡(jiǎn)潔的轉(zhuǎn)換篩選 | 一行代碼完成轉(zhuǎn)換 |
9. 字典嵌套(nested dict)
9.1 什么是嵌套字典
我們?cè)谇懊鎸W(xué)習(xí)了普通字典,它的特點(diǎn)是一個(gè)鍵對(duì)應(yīng)一個(gè)值。但在實(shí)際開發(fā)中,我們經(jīng)常會(huì)遇到更復(fù)雜的數(shù)據(jù)——一個(gè)鍵對(duì)應(yīng)多個(gè)值,或者數(shù)據(jù)本身有層級(jí)關(guān)系。這就是我們接下來(lái)要學(xué)習(xí)的嵌套字典。
嵌套字典是指字典中的值本身也是一個(gè)字典。換句話說(shuō),就是字典里面嵌套字典,形成多層次的數(shù)據(jù)結(jié)構(gòu)。它可以以層次結(jié)構(gòu)的方式組織和存儲(chǔ)數(shù)據(jù),非常適合表示復(fù)雜的關(guān)系型數(shù)據(jù)。
# 簡(jiǎn)單字典(鍵對(duì)應(yīng)單個(gè)值)
student = {"name": "張三", "age": 18}
# 嵌套字典(鍵對(duì)應(yīng)一個(gè)字典)
student = {
"name": "張三",
"profile": {
"age": 18,
"city": "北京",
"email": "zhangsan@example.com"
},
"scores": {
"語(yǔ)文": 85,
"數(shù)學(xué)": 92,
"英語(yǔ)": 78
}
}
嵌套字典的結(jié)構(gòu):
外層字典
├── name: "張三"
├── profile: 內(nèi)層字典1
│ ├── age: 18
│ ├── city: "北京"
│ └── email: "zhangsan@example.com"
└── scores: 內(nèi)層字典2
├── 語(yǔ)文: 85
├── 數(shù)學(xué): 92
└── 英語(yǔ): 78
常見的嵌套場(chǎng)景:
- 多個(gè)學(xué)生的信息:每個(gè)學(xué)生是一個(gè)字典,所有學(xué)生組成一個(gè)大字典
- JSON 數(shù)據(jù):JSON 對(duì)象本身就是嵌套字典
- 配置信息:多級(jí)分類的配置項(xiàng)
9.2 嵌套字典的增刪改查
嵌套字典的操作與普通字典類似,但需要指定多層鍵。
# 創(chuàng)建嵌套字典
company = {
"部門A": {"員工數(shù)": 10, "預(yù)算": 50000},
"部門B": {"員工數(shù)": 15, "預(yù)算": 80000}
}
# 查:訪問嵌套字典中的值
print(company["部門A"]) # 輸出: {'員工數(shù)': 10, '預(yù)算': 50000}
print(company["部門A"]["員工數(shù)"]) # 輸出: 10
# 增:添加新的嵌套字典
company["部門C"] = {"員工數(shù)": 8, "預(yù)算": 30000}
print(company)
# 輸出: {'部門A': {...}, '部門B': {...}, '部門C': {...}}
# 改:修改嵌套字典中的值
company["部門A"]["預(yù)算"] = 60000
print(company["部門A"]) # 輸出: {'員工數(shù)': 10, '預(yù)算': 60000}
# 增:在嵌套字典中添加新鍵值對(duì)
company["部門A"]["負(fù)責(zé)人"] = "張三"
print(company["部門A"]) # 輸出: {'員工數(shù)': 10, '預(yù)算': 60000, '負(fù)責(zé)人': '張三'}
# 刪:刪除嵌套字典中的鍵值對(duì)
del company["部門B"]["員工數(shù)"]
print(company["部門B"]) # 輸出: {'預(yù)算': 80000}
# 使用 pop() 刪除并獲取值
removed = company["部門C"].pop("預(yù)算")
print(removed) # 輸出: 30000
print(company["部門C"]) # 輸出: {'員工數(shù)': 8}
注意:訪問嵌套字典時(shí),如果中間層的鍵不存在,會(huì)拋出 KeyError??梢允褂?get() 方法安全訪問:
# 安全訪問嵌套字典
print(company.get("部門D", {})) # 輸出: {}(鍵不存在返回默認(rèn)值)
print(company.get("部門A", {}).get("預(yù)算")) # 輸出: 60000
# 鏈?zhǔn)秸{(diào)用需要注意:任何一個(gè) get() 返回默認(rèn)值都會(huì)繼續(xù)調(diào)用
print(company.get("部門D", {}).get("預(yù)算")) # 輸出: None(不會(huì)報(bào)錯(cuò))
9.3 嵌套字典的遍歷
遍歷嵌套字典需要使用嵌套循環(huán),或者通過(guò)遞歸處理。
# 嵌套字典
company = {
"部門A": {"員工數(shù)": 10, "預(yù)算": 50000},
"部門B": {"員工數(shù)": 15, "預(yù)算": 80000}
}
# 遍歷外層字典的所有鍵值對(duì)
print("=== 遍歷所有部門及其信息 ===")
for dept, info in company.items():
print(f"部門: {dept}")
for key, value in info.items():
print(f" {key}: {value}")
# 輸出:
# 部門: 部門A
# 員工數(shù): 10
# 預(yù)算: 50000
# 部門: 部門B
# 員工數(shù): 15
# 預(yù)算: 80000
# 遍歷所有值(嵌套字典的值)
print("\n=== 遍歷所有詳細(xì)信息 ===")
for dept, info in company.items():
for value in info.values():
print(value)
# 輸出: 10, 50000, 15, 80000
# 使用字典推導(dǎo)式創(chuàng)建新嵌套字典
doubled = {dept: {k: v * 2 for k, v in info.items()} for dept, info in company.items()}
print(doubled)
# 輸出: {'部門A': {'員工數(shù)': 20, '預(yù)算': 100000}, '部門B': {'員工數(shù)': 30, '預(yù)算': 160000}}
# 統(tǒng)計(jì)所有部門的總預(yù)算
total_budget = sum(info["預(yù)算"] for info in company.values())
print(f"總預(yù)算: {total_budget}") # 輸出: 總預(yù)算: 130000
# 找出員工數(shù)最多的部門
# company.items() 返回鍵值對(duì)元組:(鍵, 值) = (部門名稱, {'員工數(shù)': 10, '預(yù)算': 50000})
# x[0] 是部門名稱(鍵),x[1] 是員工數(shù)和預(yù)算(值,是一個(gè)字典)
max_staff_dept = max(company.items(), key=lambda x: x[1]["員工數(shù)"])
print(f"員工最多的部門: {max_staff_dept[0]}") # 輸出: 員工最多的部門: 部門B
9.4 實(shí)際應(yīng)用場(chǎng)景
嵌套字典在實(shí)際開發(fā)中非常常見,下面列舉幾個(gè)典型場(chǎng)景:
場(chǎng)景1:學(xué)生成績(jī)管理系統(tǒng)
students = {
"張三": {
"語(yǔ)文": 85,
"數(shù)學(xué)": 92,
"英語(yǔ)": 78
},
"李四": {
"語(yǔ)文": 90,
"數(shù)學(xué)": 88,
"英語(yǔ)": 95
},
"王五": {
"語(yǔ)文": 75,
"數(shù)學(xué)": 82,
"英語(yǔ)": 80
}
}
# 查詢某個(gè)學(xué)生的成績(jī)
print(students["張三"]["數(shù)學(xué)"]) # 輸出: 92
# 計(jì)算每個(gè)學(xué)生的平均分
for name, scores in students.items():
avg = sum(scores.values()) / len(scores)
print(f"{name}的平均分: {avg:.1f}")
# 找出每科最高分
subjects = ["語(yǔ)文", "數(shù)學(xué)", "英語(yǔ)"]
for subject in subjects:
max_score = max(students[name][subject] for name in students)
print(f"{subject}最高分: {max_score}")
場(chǎng)景2:電商訂單信息
orders = {
"訂單001": {
"商品": "iPhone 15",
"數(shù)量": 2,
"價(jià)格": 5999,
"客戶": {
"姓名": "張三",
"電話": "13800138000",
"地址": "北京市朝陽(yáng)區(qū)"
}
},
"訂單002": {
"商品": "MacBook Pro",
"數(shù)量": 1,
"價(jià)格": 12999,
"客戶": {
"姓名": "李四",
"電話": "13900139000",
"地址": "上海市浦東新區(qū)"
}
}
}
# 訪問嵌套的客戶信息
print(orders["訂單001"]["客戶"]["姓名"]) # 輸出: 張三
# 統(tǒng)計(jì)總收入
total = sum(order["價(jià)格"] * order["數(shù)量"] for order in orders.values())
print(f"總收入: {total}") # 輸出: 總收入: 24997
場(chǎng)景3:多層分類配置
config = {
"數(shù)據(jù)庫(kù)": {
"MySQL": {
"host": "localhost",
"port": 3306,
"max_connections": 100
},
"Redis": {
"host": "localhost",
"port": 6379
}
},
"日志": {
"級(jí)別": "INFO",
"文件路徑": "/var/log/app.log",
"最大大小": "100MB"
}
}
# 訪問深層配置
print(config["數(shù)據(jù)庫(kù)"]["MySQL"]["host"]) # 輸出: localhost
學(xué)習(xí)建議:嵌套字典是處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)的利器。在實(shí)際使用中,我們要注意層級(jí)的合理性——過(guò)深的嵌套會(huì)增加代碼復(fù)雜度。如果我們發(fā)現(xiàn)嵌套太深,可以考慮拆分成多個(gè)字典或使用類來(lái)組織數(shù)據(jù)。
10. 總結(jié)
我們?cè)诒菊聦W(xué)習(xí)了 Python 字典的核心操作,主要包括以下幾個(gè)方面:
- 字典創(chuàng)建:使用
{}、dict()、fromkeys()、字典推導(dǎo)式 - 字典查詢:通過(guò)鍵獲取值、
get()方法、keys()/values()/items()、in運(yùn)算符 - 字典增加:直接賦值、
setdefault()、update() - 字典修改:通過(guò)鍵修改、
update() - 字典刪除:
pop()、popitem()、del、clear() - 字典遍歷:遍歷鍵、值、鍵值對(duì),字典推導(dǎo)式
- 嵌套字典:多層級(jí)的字典結(jié)構(gòu)及其操作
掌握這些操作后,我們就可以在實(shí)際開發(fā)中高效地使用字典來(lái)處理各種數(shù)據(jù)了。
以上就是從增刪改查到遍歷嵌套詳解Python中字典操作的完全指南的詳細(xì)內(nèi)容,更多關(guān)于Python字典操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用wxpy模塊實(shí)現(xiàn)微信兩兩群組消息同步功能(推薦)
這篇文章主要介紹了Python使用wxpy模塊實(shí)現(xiàn)微信兩兩群組消息同步,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Python自定義scrapy中間模塊避免重復(fù)采集的方法
這篇文章主要介紹了Python自定義scrapy中間模塊避免重復(fù)采集的方法,實(shí)例分析了Python實(shí)現(xiàn)采集的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
pycharm激活碼免費(fèi)分享適用最新pycharm2020.2.3永久激活
免費(fèi)為大家分享Pycharm激活碼,適用最新版pycharm2020.2.3永久激活,pycharm2018,pycharm2019也可永久激活,可成功激活到2089年2020-11-11
Python實(shí)戰(zhàn)之整蠱神器合集加速友盡
讀萬(wàn)卷書不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶用python來(lái)做幾個(gè)整蠱的小程序,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣,發(fā)給朋友加固一下友誼2021-10-10
python 如何用terminal輸入?yún)?shù)
這篇文章主要介紹了python 如何用terminal輸入?yún)?shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
Python如何安裝mysql數(shù)據(jù)庫(kù)模塊
這篇文章主要介紹了Python如何安裝mysql數(shù)據(jù)庫(kù)模塊問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07

