2024年11月27日 星期三

defaultdict 15 例

 defaultdict 20 個範例


1. 建立圖的鄰接表

用 defaultdict(list) 建立鄰接表,方便處理節點與節點之間的關係。

from collections import defaultdict

edges = [(1, 2), (2, 3), (3, 4), (4, 5)]  # 圖的邊
graph = defaultdict(list)  # 初始化鄰接表

for u, v in edges:
    graph[u].append(v)  # 加入雙向關係
    graph[v].append(u)

print(graph)  # 印出鄰接表


2. 計算字元出現次數

用 defaultdict(int) 統計字串中每個字元的出現次數。

from collections import defaultdict

text = "defaultdict is powerful"  # 目標文字
char_count = defaultdict(int)  # 初始化字元計數器

for char in text:
    char_count[char] += 1  # 累加字元次數

print(char_count)  # 印出結果


3. 分類資料

將資料按照類別分組,例如水果與蔬菜。

from collections import defaultdict

data = [("apple", "fruit"), ("carrot", "vegetable"), ("banana", "fruit")]
grouped_data = defaultdict(list)  # 初始化分類資料結構

for item, category in data:
    grouped_data[category].append(item)  # 將項目加入對應類別

print(grouped_data)  # 印出分組結果


4. 模擬二維表格

用 defaultdict(dict) 建立二維結構。

from collections import defaultdict

table = defaultdict(dict)  # 初始化二維表格

table["row1"]["col1"] = 1
table["row1"]["col2"] = 2
table["row2"]["col1"] = 3

print(table)  # 印出表格內容


5. 計算類別數量

用 defaultdict(int) 統計每個類別中的項目數量。

from collections import defaultdict

categories = [("electronics", "phone"), ("electronics", "laptop"), ("food", "apple")]
category_count = defaultdict(int)  # 初始化類別計數器

for category, item in categories:
    category_count[category] += 1  # 累加類別數量

print(category_count)  # 印出類別統計


6. 找出每類的最大值

在多筆資料中找出每個鍵對應的最大值。

from collections import defaultdict

scores = [("Alice", 85), ("Bob", 95), ("Alice", 90), ("Bob", 88)]
max_scores = defaultdict(int)  # 初始化最大值字典

for name, score in scores:
    max_scores[name] = max(max_scores[name], score)  # 更新最大值

print(max_scores)  # 印出最大值結果


7. 計算帳戶餘額

根據交易記錄計算每個帳戶的最終餘額。

from collections import defaultdict

transactions = [("AccountA", 100), ("AccountB", 50), ("AccountA", -30), ("AccountB", 20)]
balances = defaultdict(int)  # 初始化餘額字典

for account, amount in transactions:
    balances[account] += amount  # 累加金額

print(balances)  # 印出帳戶餘額


8. 計算單字次數

統計句子中每個單字出現的次數。

from collections import defaultdict

sentence = "defaultdict is a very useful tool defaultdict is powerful"
word_count = defaultdict(int)  # 初始化單字計數器

for word in sentence.split():
    word_count[word] += 1  # 累加單字次數

print(word_count)  # 印出單字計數


9. 管理多對多關係

紀錄學生與課程的多對多關係。

from collections import defaultdict

student_courses = [("Alice", "Math"), ("Alice", "Science"), ("Bob", "Math")]
course_students = defaultdict(list)  # 初始化多對多關係

for student, course in student_courses:
    course_students[course].append(student)  # 將學生加入對應課程

print(course_students)  # 印出課程與學生的關係


10. 計算類別總長度

計算每個類別中資料的字元總和。

from collections import defaultdict

data = [("fruit", "apple"), ("vegetable", "carrot"), ("fruit", "banana")]
lengths = defaultdict(int)  # 初始化類別長度計算

for category, item in data:
    lengths[category] += len(item)  # 累加字元長度

print(lengths)  # 印出類別總長度


11. 記錄字元位置

紀錄字串中每個字元的索引位置。

from collections import defaultdict

text = "defaultdict"
char_positions = defaultdict(list)  # 初始化字元位置紀錄

for index, char in enumerate(text):
    char_positions[char].append(index)  # 將索引加入對應字元

print(char_positions)  # 印出字元位置


12. 建立多層嵌套字典

用 defaultdict 動態建立多層結構。

from collections import defaultdict

nested_dict = lambda: defaultdict(nested_dict)  # 定義多層嵌套函數
data = nested_dict()

data["level1"]["level2"]["level3"] = "value"  # 設定值
print(data)  # 印出多層結構


13. 日期按月份分組

根據日期分組資料,統計每月的項目。

from collections import defaultdict

dates = ["2024-01-01", "2024-01-15", "2024-02-01", "2024-02-15"]
monthly_data = defaultdict(list)  # 初始化月份分組

for date in dates:
    month = date[:7]  # 提取年月
    monthly_data[month].append(date)  # 加入對應月份

print(monthly_data)  # 印出每月資料


14. 倒排索引

建立倒排索引,用於快速查詢關鍵字。

from collections import defaultdict

documents = {1: "defaultdict is amazing", 2: "collections includes defaultdict"}
inverted_index = defaultdict(list)  # 初始化倒排索引

for doc_id, content in documents.items():
    for word in content.split():
        inverted_index[word].append(doc_id)  # 加入對應文檔

print(inverted_index)  # 印出倒排索引


15. 合併多個字典

將多個字典中的數值合併。

from collections import defaultdict

dicts = [{"a": 1, "b": 2}, {"a": 3, "c": 4}, {"b": 5}]
merged = defaultdict(list)  # 初始化合併結果

for d in dicts:
    for key, value in d.items():
        merged[key].append(value)  # 合併對應鍵的值

print(merged)  # 印出合併結果

沒有留言:

張貼留言