مقدمه
با توجه به اینکه آیتمهای یک دیکشنری به صورت جفتهای کلید و مقدار هستند، حلقه زدن
روی یک دیکشنری میتواند با پیمایش روی کلیدها، روی مقادیر و یا روی جفتهای کلید و مقدار
،همراه باشد. در این درس، خواهیم دید که چطور میتوانیم به هر یک از این سه روش
روی یک دیکشنری حلقه بزنیم و کلیدها، مقادیر یا جفتها را پیمایش کنیم.
پیمایش روی کلیدهای دیکشنری
اگر یک دیکشنری را با حلقهای مثل for پیمایش کنیم، این کلیدهای دیکشنری هستند که پیمایش
میشوند.
برای روشن شدن این موضوع، به مثال زیر نگاه کنید.
looping_dictionaries.py
user_1 = {'username': 'alice', 'age': 26, 'is_active': False}
for key in user_1:
print(key)
اجرای این کد، با نتیجهی زیر همراه است.
username
age
is_active
پس، در حالت پیش فرض، این کلیدهای دیکشنری هستند که مورد پیمایش قرار میگیرند.
البته اگر از متد keys() مانند زیر روی دیکشنری استفاده کنیم، همین نتیجه حاصل میشود.
looping_dictionaries.py
user_1 = {'username': 'alice', 'age': 26, 'is_active': False}
for key in user_1.keys():
print(key)
پیمایش روی مقادیر دیکشنری
اگر بخواهیم به جای کلیدها، روی مقادیر موجود در یک دیکشنری پیمایش کنیم، باید
از متدی به نام values() استفاده کنیم. در مثال زیر، از این متد استفاده کردهایم.
looping_dictionaries.py
user_1 = {'username': 'alice', 'age': 26, 'is_active': False}
for key in user_1.values():
print(key)
اگر این کد را اجرا کنید، نتیجهی زیر را دریافت خواهید کرد.
alice
26
False
پیمایش روی جفتهای کلید و مقدار
امکان پیمایش روی جفتهای کلید و مقدار هم وجود دارد. برای این کار، باید از
متد items() استفاده کنیم و البته در ساختار حلقه هم باید دو نام متغیر تعیین کنیم
که اولی به کلیدها و دومی به مقادیر اشاره میکند.
looping_dictionaries.py
user_1 = {'username': 'alice', 'age': 26, 'is_active': False}
for key, value in user_1.items():
print(f"{key} is {value}")
خروجی کد بالا به صورت زیر است.
username is alice
age is 26
is_active is False
البته میتوانیم با استفاده از تکنیک زیر، نتیجهی مشابهی را بدست آوریم.
looping_dictionaries.py
user_1 = {'username': 'alice', 'age': 26, 'is_active': False}
for key in user_1:
print(f"{key} is {user_1[key]}")
تا اینجا در ساختار حلقه، از نامهای key و value برای متغیرهای حلقه استفاده کردیم.
اما گاهی بهتر است از نامهای بامعناتری استفاده کنیم. به مثال زیر توجه کنید.
looping_dictionaries.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name, language in favorite_languages.items():
print(f"{name.title()}'s favorite language is {language.title()}.")
نتیجهی اجرای این کد، به صورت یر خواهد بود.
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Rust.
Phil's favorite language is Python.
حلقه زدن روی دیکشنریهای تودرتو
همانطور که قبلاً هم گفتیم، در جفتهای کلید و مقدار یک دیکشنری، مقدار
میتواند از هر نوعی باشد. از جمله اینکه این مقدار میتواند خود یک دیکشنری باشد.
در این حالت، ما با دیکشنریهای تودرتو (nesting ditionaries) مواجه هستیم.
پیمایش روی دیکشنریهای تودرتو به حلقههای تودرتو نیاز دارد. مثال زیر را ببینید.
looping_dictionaries.py
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print(f"\nUsername: {username}")
full_name = f"{user_info['first']} {user_info['last']}"
location = user_info['location']
print(f"\tFull name: {full_name.title()}")
print(f"\tLocation: {location.title()}")
نتیجهی اجرای کد بالا به صورت زیر خواهد بود.
Username: aeinstein
Full name: Albert Einstein
Location: Princeton
Username: mcurie
Full name: Marie Curie
Location: Paris
تودرتوسازی یا nesting مختص دیکشنریها نیست و ما میتوانیم لیستی از دیکشنریها، لیستی از تاپلها،
یک دیکشنری از لیستها یا لیستی شامل لیستها داشته باشیم و به طور کلی، آیتمهای یک کالکشن
میتوانند کالکشن باشند.