精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從新手到高手:掌握這十個字典和集合技巧,代碼效率翻倍

開發
你是否曾經因為鍵不存在而報 KeyError,導致程序崩潰?本文會教你十個日常開發中最實用的字典和集合技巧,讓你寫代碼更快更穩。

你是否曾經為了查找一個值,寫了一個嵌套循環,最后才發現用字典一行就解決了?你是否曾經用列表去重,結果等了半天,后來才知道集合能瞬間完成?你是否曾經因為鍵不存在而報 KeyError,導致程序崩潰?本文會教你10個日常開發中最實用的字典和集合技巧,讓你寫代碼更快更穩。

一、字典的日常技巧(1-6)

1:get() 和 setdefault() —— 安全地獲取和設置值

問題場景:

# 你肯定遇到過這個問題
user_info = {"name": "張三", "age": 25}

# ? 直接訪問會報錯
email = user_info["email"]
# KeyError: 'email'

# ? 用 get() 安全獲取
email = user_info.get("email")
print(email)  # None

# ? 提供默認值
email = user_info.get("email", "unknown@example.com")
print(email)  # unknown@example.com

get() vs setdefault() 的區別:

settings = {"theme": "dark"}

# get() —— 只讀取,不修改
result = settings.get("language", "zh_CN")
print(result)  # zh_CN
print(settings)  # {'theme': 'dark'}(不變)

# setdefault() —— 讀取,如果不存在就設置
result = settings.setdefault("language", "zh_CN")
print(result)  # zh_CN
print(settings)  # {'theme': 'dark', 'language': 'zh_CN'}(被設置了)

# 實戰應用:初始化配置
def get_user_settings(user_id):
    """獲取用戶設置,不存在則使用默認值"""
    settings = {}
    
    # 多個默認值的情況
    settings.setdefault("theme", "light")
    settings.setdefault("font_size", 14)
    settings.setdefault("language", "zh_CN")
    settings.setdefault("notifications", True)
    
    return settings

config = get_user_settings("user123")
print(config)
# {'theme': 'light', 'font_size': 14, 'language': 'zh_CN', 'notifications': True}

實戰應用:處理 API 響應

# 場景:解析不完整的 JSON 數據
def parse_user_data(api_response):
    """安全地解析 API 返回的用戶數據"""
    user = {
        "user_id": api_response.get("id"),
        "username": api_response.get("username", "anonymous"),
        "email": api_response.get("email", "no-email@example.com"),
        "profile": {
            "age": api_response.get("age", 0),
            "city": api_response.get("city", "unknown"),
            "bio": api_response.get("bio", "")
        }
    }
    return user

# 即使 API 返回不完整,也不會崩潰
incomplete_data = {"id": 123, "username": "user123"}
result = parse_user_data(incomplete_data)
print(result)
# {'user_id': 123, 'username': 'user123', 'email': 'no-email@example.com', ...}

2:defaultdict —— 自動初始化的字典

相比 get() 的優勢:

from collections import defaultdict

# 場景1:計數
# ? 傳統做法(重復代碼)
word_count = {}
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]

for word in words:
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1

print(word_count)  # {'apple': 3, 'banana': 2, 'cherry': 1}

# ? 用 defaultdict(簡潔)
word_count = defaultdict(int)
for word in words:
    word_count[word] += 1

print(dict(word_count))  # {'apple': 3, 'banana': 2, 'cherry': 1}

# 場景2:分組
# ? 傳統做法
students = [
    {"name": "張三", "class": "1班"},
    {"name": "李四", "class": "2班"},
    {"name": "王五", "class": "1班"},
]

class_groups = {}
for student in students:
    cls = student["class"]
    if cls notin class_groups:
        class_groups[cls] = []
    class_groups[cls].append(student["name"])

print(class_groups)

# ? 用 defaultdict(更簡潔)
class_groups = defaultdict(list)
for student in students:
    class_groups[student["class"]].append(student["name"])

print(dict(class_groups))
# {'1班': ['張三', '王五'], '2班': ['李四']}

場景3:嵌套字典

from collections import defaultdict

# 統計每個城市每個部門的員工數
employees = [
    {"city": "北京", "dept": "技術", "count": 3},
    {"city": "北京", "dept": "銷售", "count": 2},
    {"city": "上海", "dept": "技術", "count": 4},
    {"city": "上海", "dept": "銷售", "count": 1},
]

# ? 普通字典(代碼啰嗦)
result = {}
for emp in employees:
    city = emp["city"]
    dept = emp["dept"]
    if city notin result:
        result[city] = {}
    if dept notin result[city]:
        result[city][dept] = 0
    result[city][dept] += emp["count"]

# ? defaultdict(優雅)
dept_stats = defaultdict(lambda: defaultdict(int))
for emp in employees:
    dept_stats[emp["city"]][emp["dept"]] += emp["count"]

print(dict(dept_stats))
# {'北京': {'技術': 3, '銷售': 2}, '上海': {'技術': 4, '銷售': 1}}

3:字典快速去重 —— 保留順序很重要

為什么要保留順序?

# Python 3.7+ 字典是有序的
data = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# ? 不好的做法(順序被打亂)
unique = list(set(data))
print(unique)  # [1, 2, 3, 4, 5, 6, 9](順序變了)

# ? 好的做法1:用字典保留順序
unique = list(dict.fromkeys(data))
print(unique)  # [3, 1, 4, 5, 9, 2, 6](順序保留)

# ? 好的做法2:用集合+列表(如果不關心順序)
seen = set()
unique = [x for x in data ifnot (x in seen or seen.add(x))]
print(unique)  # [3, 1, 4, 5, 9, 2, 6](也能保留順序)

# 實戰應用:用戶訪問日志去重
user_visits = [
    ("user1", "2024-01-01"),
    ("user2", "2024-01-01"),
    ("user1", "2024-01-02"),
    ("user1", "2024-01-01"),  # 重復
    ("user3", "2024-01-01"),
]

# 去重但保留首次訪問的順序
unique_visits = list(dict.fromkeys(user_visits))
print(unique_visits)
# [('user1', '2024-01-01'), ('user2', '2024-01-01'), ('user1', '2024-01-02'), ('user3', '2024-01-01')]

4:items() 迭代 —— 既要鍵也要值

最常見的錯誤:

data = {"a": 1, "b": 2, "c": 3}

# ? 錯誤的做法1(需要額外查詢)
for key in data:
    print(key, data[key])  # 每次都要查詢一次

# ? 錯誤的做法2(只能看到鍵)
for key in data.keys():
    print(key)  # 看不到值

# ? 正確的做法(既要鍵又要值)
for key, value in data.items():
    print(key, value)

# ? 如果只要值
for value in data.values():
    print(value)

實戰應用:數據轉換

# 場景1:修改字典的值
prices = {"apple": 3.99, "banana": 2.49, "cherry": 4.99}

# ? 不好的做法
for key in prices:
    prices[key] = prices[key] * 1.1# 低效

# ? 好的做法(如果需要新字典)
increased_prices = {k: v * 1.1for k, v in prices.items()}
print(increased_prices)
# {'apple': 4.389, 'banana': 2.739, 'cherry': 5.489}

# 場景2:過濾字典
data = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}

# 保留值大于 2 的項
filtered = {k: v for k, v in data.items() if v > 2}
print(filtered)  # {'c': 3, 'd': 4, 'e': 5}

# 場景3:反轉鍵值
mapping = {"user1": "張三", "user2": "李四", "user3": "王五"}

# 反轉成名字到 ID 的映射
reverse_mapping = {v: k for k, v in mapping.items()}
print(reverse_mapping)
# {'張三': 'user1', '李四': 'user2', '王五': 'user3'}

5:pop() 和 popitem() —— 刪除并獲取值

什么時候用 pop():

# pop():刪除指定鍵的值并返回
data = {"name": "張三", "age": 25, "city": "北京"}

# 刪除并獲取
age = data.pop("age")
print(age)  # 25
print(data)  # {'name': '張三', 'city': '北京'}

# 如果鍵不存在,提供默認值
phone = data.pop("phone", "no-phone")
print(phone)  # no-phone

# 實戰應用:處理 API 參數
def create_user(user_data):
    """從 API 請求中提取參數"""
    name = user_data.pop("name")
    age = user_data.pop("age")
    email = user_data.pop("email")
    
    # 剩余的參數存為 extra
    extra = user_data
    
    return {"name": name, "age": age, "email": email, "extra": extra}

request = {"name": "張三", "age": 25, "email": "zhangsan@example.com", "phone": "123456"}
result = create_user(request)
print(result)
# {'name': '張三', 'age': 25, 'email': 'zhangsan@example.com', 'extra': {'phone': '123456'}}

popitem() 的特殊用途:

# popitem():刪除最后添加的項(Python 3.7+)
recent_views = {"video1": "2024-01-05", "video2": "2024-01-04", "video3": "2024-01-03"}

# 獲取最近瀏覽的視頻
video, date = recent_views.popitem()
print(f"最近瀏覽:{video} - {date}")

# 實戰應用:緩存管理(限制緩存大小)
from collections import OrderedDict

def add_to_cache(cache, key, value, max_size=3):
    """添加到緩存,超過大小時刪除最舊的"""
    if key in cache:
        del cache[key]  # 刪除舊值
    
    cache[key] = value
    
    # 超過容量,刪除最舊的項
    if len(cache) > max_size:
        oldest_key, oldest_value = cache.popitem(last=False)
        print(f"刪除過期緩存:{oldest_key}")

cache = OrderedDict()
add_to_cache(cache, "a", 1)
add_to_cache(cache, "b", 2)
add_to_cache(cache, "c", 3)
print(dict(cache))  # {'a': 1, 'b': 2, 'c': 3}

add_to_cache(cache, "d", 4)  # 超過大小,會刪除 'a'
print(dict(cache))  # {'b': 2, 'c': 3, 'd': 4}

6:update() 和 | 合并 —— 快速合并字典

兩種合并方式的對比:

dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "d": 4}

# ? 低效的做法
for key, value in dict2.items():
    dict1[key] = value

# ? 方式1:update()(原地修改)
dict1 = {"a": 1, "b": 2}
dict1.update(dict2)
print(dict1)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# ? 方式2:| 操作符(Python 3.9+,創建新字典)
dict1 = {"a": 1, "b": 2}
dict3 = dict1 | dict2
print(dict3)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(dict1)  # 原字典不變 {'a': 1, 'b': 2}

# 處理鍵沖突
user1 = {"name": "張三", "age": 25}
user2 = {"age": 26, "city": "北京"}

# 后者覆蓋前者
merged = user1 | user2
print(merged)  # {'name': '張三', 'age': 26, 'city': '北京'}

# 實戰應用:合并配置
default_config = {"host": "localhost", "port": 5432, "debug": False}
user_config = {"host": "remote.server", "debug": True}

# 用戶配置覆蓋默認配置
final_config = default_config | user_config
print(final_config)
# {'host': 'remote.server', 'port': 5432, 'debug': True}

二、集合的實用技巧(7-10)

7:集合去重 —— 最快的方式

為什么集合最快?

import time

# 生成有很多重復的數據
data = list(range(10000)) * 10# 10 萬個數字,有重復
print(f"原始長度:{len(data)}")  # 100000

# ? 不好的做法1(非常慢,O(n2))
def remove_dup_slow(data):
    result = []
    for item in data:
        if item notin result:  # 每次都搜索整個列表
            result.append(item)
    return result

# ? 不好的做法2(雖然快但順序打亂)
def remove_dup_no_order(data):
    return list(set(data))

# ? 好的做法(快且保留順序)
def remove_dup_fast(data):
    seen = set()
    result = []
    for item in data:
        if item notin seen:  # O(1) 查詢
            seen.add(item)
            result.append(item)
    return result

# ? 或者用 dict(也能保留順序)
def remove_dup_dict(data):
    return list(dict.fromkeys(data))

# 測試性能
print("\n性能對比:")
start = time.time()
result1 = remove_dup_slow(data[:1000])  # 只用前 1000 個(太慢了)
time1 = time.time() - start
print(f"低效方法:{time1:.4f}s")

start = time.time()
result2 = remove_dup_fast(data)
time2 = time.time() - start
print(f"集合方法:{time2:.4f}s")

start = time.time()
result3 = remove_dup_dict(data)
time3 = time.time() - start
print(f"字典方法:{time3:.4f}s")

# 實戰應用:找出用戶瀏覽過的視頻
user_history = ["video1", "video2", "video1", "video3", "video2", "video4", "video1"]

# 快速得到去重的視頻列表
watched_videos = list(dict.fromkeys(user_history))
print(f"瀏覽過的視頻(保留順序):{watched_videos}")

8:集合成員檢測 —— 快速查詢

為什么不用列表?

# 場景:檢查郵箱是否在黑名單中
blacklist = ["spam@example.com", "fake@test.com", "junk@mail.com"] * 100# 300 個

test_email = "spam@example.com"

# ? 用列表(O(n),需要遍歷)
if test_email in blacklist:
    print("郵箱被黑名單攔截")

# ? 用集合(O(1),直接查詢)
blacklist_set = set(blacklist)
if test_email in blacklist_set:
    print("郵箱被黑名單攔截")

# 實戰應用:權限檢查
# 獲取允許的操作
allowed_actions = {"read", "write", "delete", "share"}

# 檢查用戶是否有權限
user_action = "read"
if user_action in allowed_actions:
    print(f"允許操作:{user_action}")
else:
    print(f"拒絕操作:{user_action}")

# 實戰應用:過濾有效數據
valid_statuses = {"active", "inactive", "pending", "suspended"}
received_statuses = ["active", "inactive", "invalid", "pending", "unknown"]

# 快速過濾出有效狀態
valid = [s for s in received_statuses if s in valid_statuses]
print(f"有效狀態:{valid}")  # ['active', 'inactive', 'pending']

9:集合運算 —— 并集、交集、差集

日常最常用的三種操作:

# 創建兩個集合
team_a = {"張三", "李四", "王五", "趙六"}
team_b = {"王五", "趙六", "孫七", "周八"}

# 1. 交集(兩個集合的公共部分)—— 最常用
common = team_a & team_b
print(f"兩個團隊都有的人:{common}")  # {'王五', '趙六'}

# 2. 差集(在 A 但不在 B)
only_in_a = team_a - team_b
print(f"只在 A 團隊的人:{only_in_a}")  # {'張三', '李四'}

# 3. 并集(兩個集合的所有元素)
all_members = team_a | team_b
print(f"所有成員:{all_members}")  # {'張三', '李四', '王五', '趙六', '孫七', '周八'}

# 實戰應用1:找出共同興趣
user1_interests = {"足球", "籃球", "游戲", "編程", "讀書"}
user2_interests = {"足球", "排球", "電影", "編程", "旅游"}

common_interests = user1_interests & user2_interests
print(f"共同興趣:{common_interests}")  # {'足球', '編程'}

# 實戰應用2:權限檢查
admin_permissions = {"read", "write", "delete", "manage_users"}
user_permissions = {"read", "write"}

# 用戶缺少的權限
missing_permissions = admin_permissions - user_permissions
print(f"用戶缺少的權限:{missing_permissions}")  # {'delete', 'manage_users'}

# 實戰應用3:數據驗證
allowed_countries = {"中國", "美國", "日本", "韓國", "英國"}
submitted_countries = ["中國", "美國", "加拿大", "日本"]

# 找出無效的國家
invalid = set(submitted_countries) - allowed_countries
print(f"無效國家:{invalid}")  # {'加拿大'}

valid = set(submitted_countries) & allowed_countries
print(f"有效國家:{valid}")  # {'中國', '美國', '日本'}

10:frozenset —— 不可變集合

什么時候用 frozenset?

# 場景1:集合作為字典的鍵或集合的元素
# ? 普通集合不行(可變的)
try:
    d = {{1, 2, 3}: "value"}
except TypeError:
    print("錯誤:集合不能作為字典鍵")

# ? frozenset 可以(不可變的)
d = {frozenset([1, 2, 3]): "value"}
print(d)  # {frozenset({1, 2, 3}): 'value'}

# 場景2:集合的集合
# ? 不行
try:
    s = {{1, 2}, {3, 4}}
except TypeError:
    print("錯誤:不能創建集合的集合")

# ? frozenset 可以
s = {frozenset([1, 2]), frozenset([3, 4])}
print(s)  # {frozenset({1, 2}), frozenset({3, 4})}

# 場景3:實際應用 —— 權限組

# 定義幾種權限組合
permission_groups = {
    frozenset(["read"]): "訪客",
    frozenset(["read", "write"]): "編輯",
    frozenset(["read", "write", "delete"]): "管理員",
}

# 根據權限找出用戶角色
user_perms = frozenset(["read", "write", "delete"])
role = permission_groups.get(user_perms, "未知角色")
print(f"用戶角色:{role}")  # 管理員

# 場景4:緩存集合操作的結果
# frozenset 可以被哈希,可以用作緩存的鍵
from functools import lru_cache

@lru_cache(maxsize=128)
def get_common_elements(set1_frozen, set2_frozen):
    """緩存兩個集合的交集運算"""
    return set1_frozen & set2_frozen

# 使用 frozenset 調用
result = get_common_elements(
    frozenset([1, 2, 3, 4]),
    frozenset([3, 4, 5, 6])
)
print(result)  # frozenset({3, 4})

三、實戰案例

案例1:用戶標簽系統

from collections import defaultdict

class TagManager:
    def __init__(self):
        # user_id -> 標簽集合
        self.user_tags = defaultdict(set)
        # 標簽 -> 用戶集合
        self.tag_users = defaultdict(set)
    
    def add_tag(self, user_id, tag):
        """為用戶添加標簽"""
        self.user_tags[user_id].add(tag)
        self.tag_users[tag].add(user_id)
    
    def get_user_tags(self, user_id):
        """獲取用戶的所有標簽"""
        return self.user_tags.get(user_id, set())
    
    def find_similar_users(self, user_id):
        """找出與該用戶標簽相同的用戶"""
        user_tags = self.user_tags[user_id]
        ifnot user_tags:
            return set()
        
        # 找有相同標簽的用戶
        similar = set()
        for tag in user_tags:
            similar.update(self.tag_users[tag])
        
        similar.discard(user_id)  # 移除自己
        return similar
    
    def find_users_by_tags(self, tags):
        """找出擁有指定標簽的用戶"""
        ifnot tags:
            return set()
        
        tags_set = set(tags)
        
        # 找有所有這些標簽的用戶
        users_with_all = None
        for tag in tags_set:
            if users_with_all isNone:
                users_with_all = self.tag_users[tag].copy()
            else:
                users_with_all &= self.tag_users[tag]
        
        return users_with_all or set()

# 使用
manager = TagManager()
manager.add_tag("user1", "python")
manager.add_tag("user1", "django")
manager.add_tag("user2", "python")
manager.add_tag("user2", "flask")
manager.add_tag("user3", "django")

print(f"user1 的標簽:{manager.get_user_tags('user1')}")
print(f"與 user1 相似的用戶:{manager.find_similar_users('user1')}")
print(f"有 python 標簽的用戶:{manager.tag_users['python']}")

案例2:API 參數驗證

def validate_api_request(request_data, required_fields, optional_fields):
    """驗證 API 請求參數"""
    
    received_fields = set(request_data.keys())
    required_set = set(required_fields)
    optional_set = set(optional_fields)
    allowed_fields = required_set | optional_set
    
    # 檢查必需字段
    missing_fields = required_set - received_fields
    if missing_fields:
        returnFalse, f"缺少必需字段:{missing_fields}"
    
    # 檢查非法字段
    invalid_fields = received_fields - allowed_fields
    if invalid_fields:
        returnFalse, f"包含非法字段:{invalid_fields}"
    
    # 驗證通過
    returnTrue, "驗證成功"

# 使用
required = ["name", "age", "email"]
optional = ["phone", "city", "bio"]

# 測試 1:缺少必需字段
request1 = {"name": "張三", "age": 25}
valid, msg = validate_api_request(request1, required, optional)
print(f"請求1:{msg}")  # 缺少必需字段:{'email'}

# 測試 2:包含非法字段
request2 = {"name": "張三", "age": 25, "email": "test@example.com", "password": "secret"}
valid, msg = validate_api_request(request2, required, optional)
print(f"請求2:{msg}")  # 包含非法字段:{'password'}

# 測試 3:驗證通過
request3 = {"name": "張三", "age": 25, "email": "test@example.com", "phone": "123456"}
valid, msg = validate_api_request(request3, required, optional)
print(f"請求3:{msg}")  # 驗證成功

四、總結

1. 什么時候用字典,什么時候用集合?

用字典的情況:

  • 需要鍵值對應關系(如用戶名到用戶信息)
  • 需要通過鍵快速查找值
  • 需要存儲復雜的結構化數據

用集合的情況:

  • 需要存儲獨一無二的值
  • 需要快速的成員檢測
  • 需要進行數學運算(并集、交集、差集)
  • 需要去重

2. 常見錯誤總結

# ? 錯誤1:直接訪問字典鍵
data = {"a": 1}
value = data["b"]  # KeyError

# ? 改正
value = data.get("b", 0)

# ? 錯誤2:用列表做去重
data = [1, 2, 2, 3, 3, 3]
unique = []
for item in data:
    if item notin unique:  # O(n2) 復雜度
        unique.append(item)

# ? 改正
unique = list(dict.fromkeys(data))  # O(n) 復雜度

# ? 錯誤3:在集合中存儲可變對象
s = {1, 2, [3, 4]}  # TypeError: unhashable type: 'list'

# ? 改正
s = {1, 2, (3, 4)}  # 用元組

# ? 錯誤4:修改字典時迭代
d = {"a": 1, "b": 2, "c": 3}
for key in d:
    del d[key]  # RuntimeError: dictionary changed size

# ? 改正
d = {"a": 1, "b": 2, "c": 3}
for key in list(d.keys()):
    del d[key]

五、一分鐘快速參考

字典最常用的五個操作:

d = {}

# 1. 安全獲取值
value = d.get("key", default_value)

# 2. 遍歷鍵值
for k, v in d.items():
    pass

# 3. 刪除并獲取
value = d.pop("key", default)

# 4. 快速合并
d1 | d2  # Python 3.9+

# 5. 自動初始化
from collections import defaultdict
dd = defaultdict(list)
dd["key"].append(1)

集合最常用的五個操作:

s = set()

# 1. 快速去重
unique = list(dict.fromkeys(data))

# 2. 成員檢測
if item in s:
    pass

# 3. 交集
common = s1 & s2

# 4. 差集
difference = s1 - s2

# 5. 添加和刪除
s.add(item)
s.remove(item)

六、練手題目

題目 1:詞頻統計

# 統計文本中每個單詞的出現頻率
text = "python python java python ruby python java"

# 你的答案:
word_count = defaultdict(int)
for word in text.split():
    word_count[word] += 1

# 或者更簡潔
word_count = {}
for word in text.split():
    word_count[word] = word_count.get(word, 0) + 1

print(word_count)
# {'python': 4, 'java': 2, 'ruby': 1}

題目 2:兩數之和

# 在列表中找出兩個數,使其和等于目標值
def find_two_sum(numbers, target):
    """找出和為 target 的兩個數"""
    seen = set()
    
    for num in numbers:
        complement = target - num
        if complement in seen:
            return (complement, num)
        seen.add(num)
    
    returnNone

# 測試
print(find_two_sum([2, 7, 11, 15], 9))  # (2, 7)
print(find_two_sum([1, 2, 3, 4], 10))   # None

題目 3:分組

# 按年齡將學生分組
students = [
    {"name": "張三", "age": 20},
    {"name": "李四", "age": 21},
    {"name": "王五", "age": 20},
    {"name": "趙六", "age": 21},
]

# 你的答案:
from collections import defaultdict

age_groups = defaultdict(list)
for student in students:
    age_groups[student["age"]].append(student["name"])

print(dict(age_groups))
# {20: ['張三', '王五'], 21: ['李四', '趙六']}

七、建議

立即動手:

  • 改造你的代碼:找一個用列表檢查成員的地方,改成用集合
  • 使用 defaultdict:在計數問題中用 defaultdict 替代傳統方式
  • 安全訪問:把所有的 d["key"] 改成 d.get("key", default)

繼續深入:

  • 學習 OrderedDict 和 Counter(都在 collections 模塊中)
  • 理解字典和集合的底層實現(哈希表)
  • 掌握更多集合運算(issubset、isdisjoint 等)

熟練掌握這些技巧后,你會發現自己寫的代碼不僅更快,而且 Bug 更少。這就是 Python的優雅之處——簡單的工具,強大的能力。

責任編輯:趙寧寧 來源: Python數智工坊
相關推薦

2025-08-21 09:35:29

2025-07-11 01:05:41

2023-10-10 22:33:20

C++編程

2025-11-12 07:43:00

2024-09-09 18:18:45

2020-10-23 09:45:06

程序員能力開發

2025-01-10 08:38:16

2025-07-28 06:49:48

Python開發圖像處理

2025-06-30 02:44:00

SpringBoot開發優化

2024-12-20 12:30:00

Python'|'代碼

2025-08-05 02:11:00

2025-07-29 09:41:55

2025-04-09 00:01:05

2025-10-27 01:55:00

Jupyter連接器nbconvert

2024-07-26 21:35:11

2011-06-14 16:31:27

QT

2024-09-26 15:00:06

2023-08-31 07:33:41

GopherCarolexcel

2021-06-25 10:20:07

Linux技巧命令

2023-03-09 15:01:21

PythonVSCode程序員
點贊
收藏

51CTO技術棧公眾號

不卡一区二区在线观看| 久久亚洲精品小早川怜子| 亚洲特黄一级片| 97人人做人人爱| 三级网在线观看| 国产第一页在线观看| 大香伊人久久精品一区二区| 中文字幕欧美区| 国产成人av在线播放| 中文字幕第3页| 免费电影视频在线看| 99视频精品全部免费在线视频| 欧美午夜宅男影院在线观看| 99一区二区三区| www.毛片com| 四虎影视成人精品国库在线观看| 国产日产欧美精品一区二区三区| 欧美一级免费看| 久久人人爽人人爽人人片| 丰满大乳少妇在线观看网站| 国产黄人亚洲片| 麻豆国产va免费精品高清在线| 91极品尤物在线播放国产| 岛国最新视频免费在线观看| 久久免费国产| 国产亚洲精品综合一区91| 国产99久久九九精品无码| 无码精品在线观看| 国产一区二区精品| 亚洲欧洲国产一区| 性欧美极品xxxx欧美一区二区| 撸视在线观看免费视频| 日精品一区二区| 色老头一区二区三区| 国产一伦一伦一伦| 国产激情在线视频| 国产1区2区3区精品美女| 国内精品久久久久久久| 一起草在线视频| 欧美成人a交片免费看| 国产视频视频一区| 精品伦精品一区二区三区视频| 国内自拍视频在线播放| 国产欧美日韩一区二区三区四区| 欧美色男人天堂| 成年人三级视频| 成人午夜免费在线观看| 亚洲一区一卡| www.色综合| 无码人妻丰满熟妇啪啪网站| 偷拍自拍在线看| 中文字幕永久在线不卡| 国产精品二区三区| 国产一区二区视频网站| 偷偷www综合久久久久久久| 在线观看成人黄色| 国产精品无码自拍| 成人影院网站| 自拍偷拍国产亚洲| 久久精品国产一区二区三区不卡| 免费黄色小视频在线观看| 久久国产精品亚洲77777| 久久精品一区中文字幕| 亚洲av无码一区东京热久久| 97青娱国产盛宴精品视频| 色婷婷精品久久二区二区蜜臀av| 自拍另类欧美| 青青久在线视频免费观看| 激情深爱一区二区| 欧美亚洲在线视频| 欧美超碰在线观看| 蜜臀a∨国产成人精品| 性色av一区二区三区| 你懂的国产视频| 68国产成人综合久久精品| 日韩电影中文字幕一区| 久久婷婷中文字幕| 亚洲综合在线电影| 亚洲成a人v欧美综合天堂| 伊人久久大香线蕉午夜av| 免费网站黄在线观看| 久久久综合精品| 国产精品视频久久久| 奇米影视第四色777| 亚洲制服av| 国产精品久久一区主播| 国产精品视频第一页| 久热国产精品| 成人网在线视频| 波多野结衣在线电影| 久久精品国产色蜜蜜麻豆| 日产精品久久久一区二区福利| 欧美久久久久久久久久久久| 色一区二区三区四区| 精品中文字幕久久久久久| 国产香蕉精品视频| 中文字幕av一区二区三区人| 亚洲精品v欧美精品v日韩精品| 男生和女生一起差差差视频| 欧美日韩卡一| 欧美日韩亚洲高清一区二区| 亚洲三级在线视频| 四虎影视4hu4虎成人| 日韩欧美中文第一页| 亚洲欧美国产中文| 国内自拍欧美| 乱亲女秽乱长久久久| 日韩一级在线视频| 国产精品88888| 日本欧美精品久久久| 欧美视频免费一区二区三区| **欧美大码日韩| 岳毛多又紧做起爽| 日韩欧美一级| 亚洲精品av在线| 99久久久免费精品| 亚洲第一天堂| 国产精品高潮呻吟久久av黑人| 亚洲精品一区二三区| 高清国产一区二区| 中文字幕免费在线不卡| 欧美人体一区二区三区| 精品剧情在线观看| 欲求不满的岳中文字幕| 天天综合网91| 国产精品久久久久久久久影视| 日本毛片在线观看| 91在线精品一区二区| 欧美区高清在线| 9色在线视频| 日韩毛片一二三区| 免费看污污网站| 国产成人黄色| 45www国产精品网站| 黄色三级网站在线观看| 亚洲人成人一区二区在线观看| 无码人妻精品一区二区三区66| 外国电影一区二区| 亚洲欧美日韩天堂一区二区| 农村老熟妇乱子伦视频| 午夜精品婷婷| 欧美诱惑福利视频| 欧美 中文字幕| 亚洲综合色噜噜狠狠| 一女被多男玩喷潮视频| av久久网站| 欧美videossexotv100| 欧美日韩一级在线观看| 亚洲中午字幕| 看高清中日韩色视频| 日本欧美在线视频免费观看| 一区二区三区精密机械公司| 男人午夜视频在线观看| 五月激情综合| av噜噜色噜噜久久| 国产桃色电影在线播放| 精品处破学生在线二十三| 欧美三级视频网站| 韩日成人在线| 国产精品第1页| av播放在线观看| 6080亚洲精品一区二区| 好吊色视频一区二区三区| 国产综合网站| 国产一区二区免费在线观看| 亚洲s色大片| 正在播放亚洲一区| 久久久精品视频在线| 日韩va亚洲va欧美va久久| 日本日本精品二区免费| 男人亚洲天堂| 欧美黑人xxxⅹ高潮交| 中文字幕有码无码人妻av蜜桃| 成人国产亚洲欧美成人综合网| 伊人久久大香线蕉午夜av| 国产一区 二区| 在线观看日韩专区| 国产精品久久久国产盗摄| 艳妇臀荡乳欲伦亚洲一区| free性中国hd国语露脸| 亚久久调教视频| 欧美一级二级三级九九九| 久久精品黄色| 久久久女女女女999久久| 极品白浆推特女神在线观看| 亚洲国产成人av好男人在线观看| 天天操狠狠操夜夜操| 九九热线有精品视频99| 国外成人性视频| 国产在线视频网站| 欧美一级二级在线观看| 可以免费看av的网址| 国产激情一区二区三区四区| www黄色日本| 性xxxx欧美老肥妇牲乱| 九九九九九精品| 91成人小视频| 久久精品国产亚洲精品| 手机看片福利永久| 亚洲综合区在线| 少妇大叫太粗太大爽一区二区| 韩日欧美一区二区三区| 丰满少妇被猛烈进入高清播放| 欧美大片一区| 五月天久久狠狠| 狠狠久久综合| 97在线视频观看| a级在线观看| 一区二区三区视频免费| 少妇av一区二区| 日韩一区二区三区视频在线观看| 欧美黄色一级大片| 午夜不卡av免费| 538任你躁在线精品视频网站| 久久蜜桃av一区精品变态类天堂| 污污免费在线观看| 亚洲影视在线| 久久久久久久香蕉| 国产伦精品一区二区三区在线播放 | 在线中文一区| 亚洲精品免费av| 污影院在线观看| 亚洲福利在线观看| 国产精品久久久久久久妇| 久久久久9999亚洲精品| 一区二区在线免费观看视频| 九色|91porny| 久久在线中文字幕| 青青一区二区| 国产精品成人在线| 欧美xxx视频| 26uuu另类亚洲欧美日本老年| av影院在线免费观看| 亚洲精品一区av在线播放| 亚洲精品一区二区三区不卡| 日韩欧美亚洲范冰冰与中字| 国产一级在线观看视频| 91啪亚洲精品| 加勒比av中文字幕| 精品动漫av| 日韩欧美99| 午夜精品在线| 51国偷自产一区二区三区的来源| 91jq激情在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产原厂视频在线观看| 亚洲第一网中文字幕| 性猛交富婆╳xxx乱大交天津| 欧美日韩亚洲一区二区| 国产精品久久久免费看| 成人免费视频网站在线观看| 四虎永久在线精品无码视频| 亚洲一区二区| 男女h黄动漫啪啪无遮挡软件| 色男人天堂综合再现| 中文字幕中文字幕在线中心一区| 婷婷亚洲五月| 成人污网站在线观看| 激情欧美一区| 国产l精品国产亚洲区久久| 外国成人免费视频| 国产又粗又大又爽的视频| 亚洲欧美文学| 无码 制服 丝袜 国产 另类| 99精品福利视频| 中文字幕人成一区| 亚洲欧洲中文字幕| 欧美黑人在线观看| 天天超碰亚洲| 精品丰满人妻无套内射| 国产视频一区免费看| 亚洲中文字幕久久精品无码喷水| 三级影片在线观看欧美日韩一区二区| 黄色三级视频在线| 国产精品一卡二卡| 亚洲精品自拍网| 国产美女久久久久| 国产精品一区二区小说| 国产乱人伦偷精品视频不卡 | 欧美精品一区二区免费| 国产成人天天5g影院在线观看| 中文字幕欧美日韩在线| 免费a级毛片在线观看| 色一情一乱一区二区| 男人天堂亚洲天堂| 国产精品999| 天堂av一区| 欧美日韩另类综合| 一本一本久久a久久综合精品| www国产精品内射老熟女| 麻豆精品一区二区| 亚洲中文字幕无码一区| 国产精品免费丝袜| 免费黄在线观看| 国产婷婷一区二区| 国产大学生自拍| 色哟哟亚洲精品| 亚洲欧美激情另类| 最近的2019中文字幕免费一页| 国产精品自拍第一页| 黄色不卡一区| 亚洲一区高清| 日日夜夜亚洲精品| 国产精品对白刺激久久久| 第四色成人网| 日韩国产高清一区| 国产精品草草| 狠狠操狠狠干视频| 久久免费的精品国产v∧| 久久久久久久蜜桃| 欧美日韩一区二区在线观看视频| 日韩中文字幕免费在线观看| 日韩在线视频网站| 韩国美女久久| 国产日韩久久| 欧美午夜不卡| 精品国产一区二区三区无码| 麻豆精品在线视频| 免费日本视频一区| 影音欧美亚洲| 久久精品人人| 岛国精品一区二区三区| 国产精品素人一区二区| 久久久久久少妇| 国产精品久久毛片a| www.中文字幕在线观看| 欧美本精品男人aⅴ天堂| 爱久久·www| x99av成人免费| 国精产品一区一区三区四川| 精选一区二区三区四区五区| 亚洲视频精品| 亚洲 自拍 另类 欧美 丝袜| 中文字幕一区二区在线播放| 国模私拍一区二区| 日韩三级.com| 成码无人av片在线观看网站| 成人福利在线观看| 99精品综合| 国产一级片自拍| 中文字幕一区三区| 国产女人爽到高潮a毛片| 欧美精品一区二区三区视频| 中文字幕免费高清电视剧网站在线观看| 欧美激情乱人伦| 日韩最新av| 久久久久久久香蕉| 成人免费视频一区二区| 日操夜操天天操| 欧美亚洲国产一区在线观看网站| 99国产精品久久久久久久成人 | 欧美做受高潮1| 高清在线一区| 亚洲激情图片| 亚洲激情综合| 亚洲久久中文字幕| 中文字幕在线观看不卡视频| 国产精品老熟女视频一区二区| 日韩三级影视基地| 精品亚洲二区| 欧美一区免费视频| 日韩精品免费专区| 国产精品麻豆免费版现看视频| 欧美日韩大陆一区二区| 性xxxfllreexxx少妇| 欧美中文字幕视频在线观看| 蜜桃视频欧美| 色一情一区二区| 樱花影视一区二区| 中文字幕av影视| 北条麻妃久久精品| 亚洲国产中文在线二区三区免| 视频一区视频二区视频三区视频四区国产| 日韩成人dvd| 欧美一区二区三区爽爽爽| 精品国精品自拍自在线| 涩涩视频在线免费看| av免费精品一区二区三区| 日韩午夜黄色| 免费网站在线高清观看| 91精品国产福利| 在线观看麻豆| 不卡日韩av| 久热精品视频| 99热精品免费| 亚洲丝袜一区在线| 9999在线精品视频| 久久久久久久中文| 最新不卡av在线| 亚洲 小说区 图片区 都市| 国产精品白嫩初高中害羞小美女| 天天综合久久| 永久免费成人代码| 日韩欧美一区二区三区久久| 黄色一级大片在线免费看产| 精品不卡在线| 国产一区欧美二区| 亚洲 欧美 日韩 在线| 色综合91久久精品中文字幕 | 动漫精品视频|