精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美激情小视频| 亚洲一区二区精品视频| 国产精品久久久久久av下载红粉| 99国产精品免费| 欧美一级大片在线视频| 亚洲福中文字幕伊人影院| 日韩国产伦理| 精品人妻少妇AV无码专区| 香蕉久久夜色精品国产| 久久精品中文字幕电影| jlzzjizz在线播放观看| 亚洲免费一区| 欧美日韩国产丝袜美女| 日本一区二区高清视频| 国产丰满果冻videossex| 久久精品欧洲| 久久久久国产精品免费| 国产激情av在线| 韩国女主播一区二区三区| 欧美日韩免费一区二区三区| 国产资源在线视频| 国产三区视频在线观看| 久久亚洲综合色| 国产精品jizz视频| 国产精品亚洲欧美在线播放| 老牛影视一区二区三区| 欧美精品九九久久| 青草影院在线观看| 精品国内自产拍在线观看视频 | 国产精品专区在线| 91欧美在线视频| 久久综合久久综合久久| 成人9ⅰ免费影视网站| 亚洲一区二区三区高清视频| 老牛嫩草一区二区三区日本| 91国产一区在线| 国产一级在线视频| 欧美日韩国产欧| 久久九九免费视频| 啪啪一区二区三区| 日韩亚洲一区在线| 中文日韩在线视频| 夜夜春很很躁夜夜躁| 香蕉视频一区二区三区| 亚洲福利精品在线| 黄色性视频网站| 超碰成人福利| 欧美va亚洲va国产综合| 国产ts在线观看| 91大神精品| 欧美xxxxxxxxx| 日本精品一二三| 一区二区三区在线资源| 日韩女优av电影| 亚洲熟妇一区二区| 国产欧美啪啪| 日韩精品在线观看一区| 97伦伦午夜电影理伦片| 国际精品欧美精品| 最近2019免费中文字幕视频三 | 亚洲欧洲中文字幕| 久久视频在线看| 青青草偷拍视频| 狠狠88综合久久久久综合网| 久久欧美在线电影| 日本在线播放视频| 日本成人在线不卡视频| 国产精品尤物福利片在线观看| 成年人视频免费| 久久国产福利国产秒拍| 成人免费午夜电影| 丁香六月天婷婷| 91美女视频网站| 亚洲国产一区二区在线| 国产一二区在线| 亚洲影视资源网| 国产午夜伦鲁鲁| 51一区二区三区| 91精品国产一区二区人妖| 韩国三级在线看| 女厕嘘嘘一区二区在线播放 | 亚洲无线看天堂av| 午夜精品久久久久影视| 99精品视频播放| 成人亚洲精品| 亚洲国产精品专区久久| 日韩一级av毛片| 91不卡在线观看| 91av在线影院| 国产绿帽一区二区三区| caoporm超碰国产精品| 欧美国产一区二区在线| 免费在线看黄色| 精品久久久久久久久中文字幕| 精品久久久久久久无码 | 91精品国产91综合久久蜜臀| 精品1卡二卡三卡四卡老狼| 精品一区二区三区中文字幕老牛| 北条麻妃一区二区三区中文字幕| 黄色小视频在线免费看| 蜜臀av一区二区在线观看| 成人免费视频观看视频| 高清中文字幕一区二区三区| 亚洲激情图片一区| 少妇黄色一级片| 狠狠一区二区三区| 久久久精品一区| 精品国产乱子伦| 懂色av中文字幕一区二区三区| 视频一区二区三区免费观看| 日本中文字幕中出在线| 欧美日韩国产综合一区二区| 在线免费看黄色片| 欧美超碰在线| 日韩免费在线视频| 天天干,夜夜爽| 亚洲欧美色一区| 日日噜噜夜夜狠狠| 日本一区福利在线| 色综合天天狠天天透天天伊人| 欧美男人天堂网| 久久综合久色欧美综合狠狠| 免费在线黄网站| 精品国产亚洲一区二区在线观看 | 美国一区二区三区在线播放| 久久精品一二三区| 波多野结衣在线播放| 欧美一级艳片视频免费观看| 丁香激情五月少妇| 久热精品在线| 欧美日韩在线观看一区| 忘忧草在线影院两性视频| 欧美成人一级视频| 国产十六处破外女视频| 激情综合色丁香一区二区| 日韩免费三级| 高清电影一区| 亚洲欧美精品一区二区| 日韩欧美成人一区二区三区| 成人av午夜电影| 69sex久久精品国产麻豆| 日韩高清二区| 欧美黑人国产人伦爽爽爽| 国产精品探花视频| 亚洲精品日产精品乱码不卡| 91热视频在线观看| 综合激情一区| 91在线精品观看| 污视频在线免费观看网站| 日韩欧美在线1卡| 久久久久黄色片| 波多野结衣在线aⅴ中文字幕不卡| 和岳每晚弄的高潮嗷嗷叫视频| 超碰97成人| 4438全国成人免费| 欧美xxx.com| 91官网在线免费观看| 精品日韩在线视频| 精品一区二区免费| 国产成人免费高清视频| 一区二区三区视频免费视频观看网站 | 久久伊人资源站| 色呦呦在线看| 亚洲国产一区自拍| 麻豆精品久久久久久久99蜜桃| 久久免费国产精品| 亚欧美在线观看| 欧美精品啪啪| 久久99久久99精品蜜柚传媒| 亚洲www.| 久久精品成人欧美大片古装| 精品久久久免费视频| 精品福利视频导航| youjizz亚洲女人| 国产在线日韩欧美| 免费看日本毛片| jiujiure精品视频播放| 91九色视频在线| а√天堂8资源在线| 国产亚洲人成a一在线v站| 国产精品色综合| 欧美性感美女h网站在线观看免费| a天堂中文字幕| 国产福利91精品| 亚洲国产精品毛片av不卡在线| 日韩在线观看一区 | 亚洲av无码片一区二区三区 | 成人18夜夜网深夜福利网| 777精品视频| 日本在线观看免费| 亚洲国产精品va在线看黑人动漫 | 亚洲国产中文字幕久久网| 无码人妻aⅴ一区二区三区有奶水| 中文字幕视频一区| 黄色免费视频网站| 蜜桃久久久久久久| 免费看毛片的网址| 欧美好骚综合网| 精品在线视频一区二区三区| 久久69成人| 91国内精品久久| 黄色视屏免费在线观看| 亚洲一区第一页| 日韩在线视频观看免费| 欧美日韩在线播| 国偷自拍第113页| 亚洲女同一区二区| 亚洲色成人网站www永久四虎| 国产大片一区二区| 午夜视频你懂的| 一区二区动漫| 黄色激情在线视频| 日韩精品欧美| 欧美日韩精品综合| jizz18欧美18| 91牛牛免费视频| 欧美日韩尤物久久| 2020国产精品视频| 欧美理论片在线播放| 最好看的2019年中文视频| 黄色软件在线观看| 亚洲国产毛片完整版| 91国内精品视频| 欧美在线你懂得| 草久久免费视频| 亚洲成人午夜影院| 青青草国产在线观看| 国产精品色一区二区三区| 中文字幕免费看| 99re热视频精品| 国产a级黄色片| 国产91丝袜在线播放0| 亚洲图片 自拍偷拍| 久久99日本精品| wwwwwxxxx日本| 免费欧美日韩国产三级电影| 黑森林福利视频导航| 亚洲免费网址| 免费高清在线观看免费| 国产精品一二| 加勒比成人在线| 亚洲美女一区| 久久久一本二本三本| 一区二区三区四区五区精品视频| 日韩精品在线观看av| 一区二区亚洲| 免费看黄在线看| 亚洲精品黄色| 国产黄页在线观看| 免费看黄裸体一级大秀欧美| 18禁免费观看网站| 午夜亚洲精品| 亚洲精品乱码久久久久久自慰| 久久国产高清| 亚洲美免无码中文字幕在线 | 国产精品久久久久久久一区二区| 色先锋aa成人| 中文av免费观看| 91精品啪在线观看国产60岁| a天堂在线观看视频| 日韩午夜在线观看视频| 穿情趣内衣被c到高潮视频| 日本啊v在线| 亚洲人高潮女人毛茸茸| 国产永久免费高清在线观看| 国产亚洲欧洲高清一区| 免费av不卡| 欧美国产日韩一区二区| аⅴ资源天堂资源库在线| 91av福利视频| 欧美日韩在线精品一区二区三区激情综合 | 欧美成人午夜视频| 在线xxxx| 91成人在线观看国产| 成人h在线观看| 91免费看网站| 亚洲a级精品| 色播五月综合| 国产专区一区| 日本精品久久久久中文字幕| 三级一区在线视频先锋| 色综合五月婷婷| av电影天堂一区二区在线观看| 欧美特黄一区二区三区| 成人欧美一区二区三区视频网页 | 国产精品v日韩精品v欧美精品网站| 男人天堂手机在线视频| 日本vs亚洲vs韩国一区三区| 日本中文字幕在线不卡| 91影院在线观看| 亚洲熟女毛茸茸| 精品福利在线看| 一级做a爰片久久毛片16| 精品国产伦一区二区三区观看方式| 三级理论午夜在线观看| 不卡中文字幕av| 偷拍精品精品一区二区三区| 91网站在线免费观看| 亚洲激情播播| 国产美女永久无遮挡| 日韩不卡一区二区| 亚洲成年人在线观看| 国产精品水嫩水嫩| 久草手机在线观看| 91.com视频| 国产一级免费在线观看| 欧美激情第6页| 亚洲精品tv| 日韩av在线一区二区三区| 狠狠综合久久| wwwwwxxxx日本| 国产视频视频一区| 日本三级中文字幕| 91精品国产免费久久综合| 国产高清视频免费最新在线| 国外视频精品毛片| 日韩成人在线观看视频| 亚洲精品在线观看免费| 免费视频久久| 韩国三级hd两男一女| 亚洲欧美在线视频| 中文区中文字幕免费看| 亚洲网站在线看| 中文字幕乱码在线播放| 亚洲美女激情视频| 亚洲天堂成人av| 国产精品久久久久久久久免费樱桃 | 亚洲精品中文字幕有码专区| 黄色网在线看| 国产日韩欧美影视| 欧美日韩激情| 搡女人真爽免费午夜网站| 久久综合精品国产一区二区三区| 国产稀缺精品盗摄盗拍| 欧美又粗又大又爽| 国产免费av高清在线| 欧美亚洲在线视频| 久久久久观看| av在线播放亚洲| 波多野结衣亚洲一区| 精品无码人妻一区二区三区品| 91精品国产91久久久久久一区二区| av网站在线播放| 国产精品男人的天堂| 国产欧美高清视频在线| 91传媒久久久| 久久久久久电影| 男人天堂视频在线| 亚洲人成电影在线| 外国成人直播| 亚洲精品久久久久久一区二区| 日韩电影免费在线看| jizz中文字幕| 欧美日韩亚洲综合在线| 蜜桃视频在线观看www社区| 国产日韩欧美自拍| 91精品电影| aaaaa黄色片| 午夜激情综合网| 嫩草在线播放| 国产伦精品一区二区三区精品视频| 久久精品国产亚洲夜色av网站| 一区二区免费av| 一区二区三区四区中文字幕| 亚洲精品无amm毛片| 91国自产精品中文字幕亚洲| 国产精品一区高清| 婷婷免费在线观看| 亚洲欧美日韩国产综合| 免费观看成年人视频| 欧美一级免费看| 欧美日韩精品在线一区| 国产精品探花在线播放| 亚洲午夜电影网| 酒色婷婷桃色成人免费av网| 国产一区二区色| 黄色日韩在线| 四虎国产精品成人免费入口| 欧美日韩精品免费| 牛牛电影国产一区二区| 欧美日韩国产不卡在线看| 麻豆91在线观看| 日本少妇激情视频| 亚洲性69xxxbbb| 欧美区一区二区| 中文字幕乱码人妻综合二区三区| 亚洲国产精品精华液ab| 国产精品国产一区二区三区四区| 韩国三级电影久久久久久| 欧美精品系列| 折磨小男生性器羞耻的故事| 在线看一区二区| 精品精品导航| 日韩亚洲视频在线| 成人性生交大片| 欧美另类高清videos的特点| 欧美国产视频一区二区| 欧美综合在线视频观看| 成人性生活免费看| 欧美精品色综合|