کار کردن با دیکشنری

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

در پایتون یک دیکشنری با دنباله‌ای از کلید-مقدارها، داخل آکُلاد {} قرار می‌گیرد:

1
alien_0 = {'color': 'green', 'points': 5}

یک جفت کلید-مقدار مجموعه‌ای از مقدارهای به هم مرتبط است. پایتون با ارائه‌ی هر کلید، مقداری را که با آن در ارتباط است برمی‌گرداند. هر کلید با یک دونقطه به مقدار خود وصل می‌شود و جفت‌های کلید-مقدارِ مجزّا با کاما از یکدیگر جدا می‌شوند.

دسترسی به مقادیر یک دیکشنری

برای گرفتن مقدار مرتبط با یک کلید، نام دیکشنری را بنویسید و سپس کلید را داخل یک جفت کروشه جلوی آن قرار دهید:

1
2
3
alien_0 = {'color': 'green'}

print(alien_0['color'])

این کد مقدار مربوط به کلید ‘color’ را از دیکشنری alien_0 برمی‌گرداند:

1
green

شما می‌توانید تعداد نامحدودی جفتِ کلید-مقدار در یک دیکشنری بگنجانید. اگر بازیکنی این موجود بیگانه را بکشد، امتیازِ کسب‌شده‌ی او با کدی به صورت زیر به دست می‌آید:

1
2
3
4
5
alien_0 = {'color': 'green', 'points': 5}

new_points = alien_0['points']

print(f"You just earned {new_points} points!")

کد 1 می‌تواند بلافاصله بعد از تعریفِ دیکشنری، مقدار مرتبط با کلید ‘points’ را از آن بیرون بکشد. این مقدار در ادامه به متغیّر new_points منسوب می‌شود. خط 2 درباره‌ی تعداد امتیازی که بازیکن دریافت کرده عبارتی چاپ می‌کند:

1
You just earned 5 points!

افزودن جفت‌های کلید-مقدار جدید

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

بیایید دو دانسته‌ی جدید به دیکشنری alien_0 بیفزاییم: مختصّات x و y آن:

1
2
3
4
5
6
7
8
alien_0 = {'color': 'green', 'points': 5}

print(alien_0)

alien_0['x_position'] = 0
alien_0['y_position'] = 25

print(alien_0)

مطابق قبل از تعریف یک دیکشنری شروع می‌کنیم. سپس آن را چاپ می‌کنیم. در 1 یک جفت کلید-مقدار جدید به آن اضافه می‌کنیم: کلید ‘x_position’ و مقدار 0. در 2 همین کار را برای کلید ‘y_position’ تکرار می‌کنیم:

1
2
3
{'color': 'green', 'points': 5}

{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
نکته
از پایتون ۳.۷ به بعد، دیکشنری‌ها ترتیبی را که مطابق آن تعریف شده‌اند، حفظ می‌کنند. زمانی که یک دیکشنری را چاپ می‌کنید یا در آن حلقه می‌زنید، اعضای آن را به همان ترتیبِ افزوده شدن خواهید دید.

شروع کردن از یک دیکشنری خالی

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

1
2
3
4
5
6
alien_0 = {}

alien_0['color'] = 'green'
alien_0['points'] = 5

print(alien_0)

نتیجه همان دیکشنری‌ای است که در مثال‌های قبلی به کار می‌بردیم:

1
{'color': 'green', 'points': 5}

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

تغییر دادن مقدارها در یک دیکشنری

برای تغییر دادن مقداری در یک دیکشنری، نام آن را به همراه کلید در داخل کروشه بنویسید و سپس مقدار جدیدی را بیاورید:

1
2
3
4
5
6
7
alien_0 = {'color': 'green'}

print(f"The alien is {alien_0['color']}.")

alien_0['color'] = 'yellow'

print(f"The alien is now {alien_0['color']}.")

ابتدا دیکشنری alien_0 را تعریف می‌کنیم که تنها شامل رنگ آن است، سپس مقدار مرتبط با کلید ‘color’ را به ‘yellow’ تغییر می‌دهیم:

1
2
3
The alien is green.

The alien is now yellow.

به عنوان یک مثال جذّاب‌تر بیاید موقعیّت یک موجود بیگانه را که با سرعت‌های مختلف حرکت می‌کند ردگیری کنیم:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}

print(f"Original position: {alien_0['x_position']}")

# Move the alien to the right.
# Determine how far to move the alien based on its current speed.
if alien_0['speed'] == 'slow':
    x_increment = 1

elif alien_0['speed'] == 'medium':
    x_increment = 2

else:
    # This must be a fast alien.
    x_increment = 3

# The new position is the old position plus the increment.
alien_0['x_position'] = alien_0['x_position'] + x_increment

print(f"New position: {alien_0['x_position']}")

در 1 یک زنجیره‌ی if-elif-else مشخّص می‌کند که موجود بیگانه چه‌قدر باید به سمت راست حرکت کند. پس از محاسبه شدن مقدارِ افزایشِ جابه‌جایی، آن را در 2 به مقدار x_position اضافه می‌کنیم:

1
2
3
Original x-position: 0

New x-position: 2

حذف کردن جفت‌های کلید-مقدار

زمانی که دیگر به اطّلاعاتِ ذخیره‌شده در دیکشنری نیاز نداشتید می‌توانید به کمک عبارت del، یک جفت کلید-مقدار را به کلّی حذف کنید:

1
2
3
4
5
6
7
alien_0 = {'color': 'green', 'points': 5}

print(alien_0)

del alien_0['points']

print(alien_0)

خروجی نشان می‌دهد که کلید ‘points’ و مقدار آن، ۵، از دیکشنری حذف شده:

1
2
3
{'color': 'green', 'points': 5}

{'color': 'green'}
نکته
توجّه داشته باشید که جفت کلید-مقدار به صورت همیشگی حذف خواهد شد.