آموزش پایتون - دیکشنری‌های تودرتو

دیکشنری‌های تودرتو (Nested Dictionaries)

دیکشنری‌های تودرتو در پایتون به دیکشنری‌هایی اشاره دارند که به عنوان مقدار (Value) در یک دیکشنری دیگر ذخیره شده‌اند. به عبارت دیگر، یک دیکشنری می‌تواند دیکشنری‌های دیگری را به عنوان مقدار در خود جای دهد و یک ساختار سلسله‌مراتبی یا تودرتو ایجاد کند.

دیکشنری‌های تودرتو را می‌توان به همان روش دیکشنری‌های معمولی تغییر داد، به‌روزرسانی کرد یا گسترش داد. شما می‌توانید جفت‌های کلید-مقدار را در هر سطحی از ساختار تودرتو اضافه، حذف یا به‌روزرسانی کنید.

ایجاد یک دیکشنری تودرتو در پایتون

ما می‌توانیم با تعریف یک دیکشنری که مقادیر برخی از کلیدهای آن خودشان دیکشنری هستند، یک دیکشنری تودرتو در پایتون تعریف کنیم. این امر امکان ایجاد ساختاری سلسله‌مراتبی را فراهم می‌کند که در آن هر جفت کلید-مقدار نشان‌دهنده یک سطح از اطلاعات تودرتو است. این کار به چند روش قابل انجام است:

مثال: مقداردهی مستقیم

در این روش، می‌توانیم در یک تعریف واحد، دیکشنری‌ها را به‌طور مستقیم به عنوان مقدار به کلیدهای بیرونی اختصاص دهیم:

# Define the outer dictionary
nested_dict = {
   "outer_key1": {"inner_key1": "value1", "inner_key2": "value2"},
   "outer_key2": {"inner_key3": "value3", "inner_key4": "value4"}
}
print(nested_dict)

مثال: استفاده از حلقه (Loop)

در این روش، ابتدا یک دیکشنری بیرونی خالی مقداردهی اولیه می‌شود و سپس با استفاده از یک حلقه، دیکشنری‌ها به عنوان مقدار درون آن قرار می‌گیرند تا ساختار تودرتو شکل بگیرد:

# Define an empty outer dictionary
nested_dict = {}

# Add key-value pairs to the outer dictionary
outer_keys = ["outer_key1", "outer_key2"]
for key in outer_keys:
   nested_dict[key] = {"inner_key1": "value1", "inner_key2": "value2"}
print(nested_dict)

افزودن آیتم‌ها به یک دیکشنری تودرتو در پایتون

پس از ایجاد یک دیکشنری تودرتو، می‌توانیم با دسترسی به دیکشنری تودرتوی مورد نظر از طریق کلید آن و سپس اختصاص یک جفت کلید-مقدار جدید به آن، آیتم‌های جدیدی اضافه کنیم.

مثال

در مثال زیر، یک دیکشنری تودرتو به نام "students" تعریف می‌کنیم که در آن هر کلید نشان‌دهنده نام یک دانشجو است و مقدار آن دیکشنری دیگری شامل جزئیات آن دانشجو است.

سپس، یک جفت کلید-مقدار جدید به دیکشنری تودرتوی Alice اضافه می‌کنیم و یک دیکشنری تودرتوی جدید برای دانشجوی جدیدی به نام Charlie اضافه می‌کنیم:

# Initial nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"}
}

# Adding a new key-value pair to Alice's nested dictionary
students["Alice"]["GPA"] = 3.8

# Adding a new nested dictionary for a new student
students["Charlie"] = {"age": 22, "major": "Mathematics"}

print(students)

این کد خروجی زیر را تولید خواهد کرد:

{'Alice': {'age': 21, 'major': 'Computer Science', 'GPA': 3.8}, 'Bob': {'age': 20, 'major': 'Engineering'}, 'Charlie': {'age': 22, 'major': 'Mathematics'}}

دسترسی به آیتم‌های یک دیکشنری تودرتو در پایتون

دسترسی به آیتم‌های یک دیکشنری تودرتو در پایتون به معنای بازخوانی مقادیر ذخیره‌شده در ساختار تودرتو با استفاده از زنجیره‌ای از کلیدها است. هر کلید مربوط به یک سطح از سلسله‌مراتب دیکشنری است.

ما می‌توانیم این کار را از طریق ایندکس‌گذاری مستقیم با کروشه [] یا با استفاده از متد get() انجام دهیم.

مثال: استفاده از ایندکس‌گذاری مستقیم

در این روش، با مشخص کردن هر کلید در تسلسلی از کروشه‌ها به مقادیر موجود در دیکشنری تودرتو دسترسی پیدا می‌کنیم. هر کلید در این تسلسل به یک سطح از دیکشنری تودرتو اشاره دارد و با هر کلید یک سطح عمیق‌تر می‌رود:

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Access Alice's major
alice_major = students["Alice"]["major"]
print("Alice's major:", alice_major) 

# Access Bob's age
bob_age = students["Bob"]["age"]
print("Bob's age:", bob_age) 

خروجی کد بالا به صورت زیر است:

Alice's major: Computer Science
Bob's age: 20

مثال: استفاده از متد get()

متد get() برای دریافت مقدار مرتبط با کلید مشخص‌شده استفاده می‌شود. اگر کلید وجود نداشته باشد، یک مقدار پیش‌فرض را برمی‌گرداند (که اگر تعیین نشده باشد، مقدار آن None است):

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Access Alice's major using .get()
alice_major = students.get("Alice", {}).get("major", "Not Found")
print("Alice's major:", alice_major)  

# Safely access a non-existing key using .get()
dave_major = students.get("Dave", {}).get("major", "Not Found")
print("Dave's major:", dave_major)  

خروجی کد بالا به صورت زیر است:

Alice's major: Computer Science
Dave's major: Not Found

حذف یک دیکشنری از دیکشنری تودرتو

ما می‌توانیم با استفاده از کلمه کلیدی del دیکشنری‌ها را از یک دیکشنری تودرتو حذف کنیم. این کلمه کلیدی به ما امکان می‌دهد یک جفت کلید-مقدار خاص را از دیکشنری تودرتو پاک کنیم.

مثال

در مثال زیر، با استفاده از دستور del دیکشنری تودرتوی مربوط به "Bob" را از دیکشنری "students" حذف می‌کنیم:

# Define a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Delete the dictionary for Bob
del students["Bob"]

# Print the updated nested dictionary
print(students)

خروجی حاصل به صورت زیر خواهد بود:

{'Alice': {'age': 21, 'major': 'Computer Science'}, 'Charlie': {'age': 22, 'major': 'Mathematics'}}

پیمایش (Iterating) در یک دیکشنری تودرتو در پایتون

پیمایش در یک دیکشنری تودرتو به معنای اجرا حلقه روی کلیدها و مقادیر در هر سطح از دیکشنری است. این کار به شما امکان می‌دهد به آیتم‌های موجود در ساختار تودرتو دسترسی داشته باشید و آن‌ها را دستکاری کنید.

ما می‌توانیم با استفاده از حلقه‌های تودرتو در یک دیکشنری تودرتو پیمایش کنیم. حلقه بیرونی روی کلیدها و مقادیر دیکشنری اصلی پیمایش می‌کند، در حالی که حلقه داخلی روی کلیدها و مقادیر دیکشنری‌های تودرتو پیمایش انجام می‌دهد.

مثال

در این مثال، ما در دیکشنری "students" پیمایش می‌کنیم و با حرکت روی دیکشنری‌های تودرتو، نام هر دانشجو و جزئیات مربوط به او را دریافت می‌کنیم:

# Defining a nested dictionary
students = {
    "Alice": {"age": 21, "major": "Computer Science"},
    "Bob": {"age": 20, "major": "Engineering"},
    "Charlie": {"age": 22, "major": "Mathematics"}
}

# Iterating through the Nested Dictionary:
for student, details in students.items():
   print(f"Student: {student}")
   for key, value in details.items():
      print(f"  {key}: {value}")

خروجی به دست آمده به صورت زیر است:

Student: Alice
  age: 21
major: Computer Science
Student: Bob
  age: 20
  major: Engineering
Student: Charlie
  age: 22
  major: Mathematics

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.