تور آموزشی

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

دیکشنری Dictionary

دیکشنری (dictionary) یکی انواع داده برای ذخیره عناصر مختلف در یک متغیر به صورت زوج کلید-مقدار (key-value) است. دیکشنری (از نسخه 3.7 پایتون به بعد) دارای ترتیب است. همچنین داده‌های آن را می‌توان ویرایش کرد (برعکس تاپل و مجموعه). در دیکشنری داده تکراری وجود ندارد (مانند مجموعه). برای تعریف یک دیکشنری از آکولاد {} استفاده می‌کنیم.

مثال:

huawei = {
    “model”: “y5”,
    “price”: 1500,
    “year”: 2019
}
print(huawei[“model”])

خروجی:

y5

در این مثال نام متغیر huawei است. این دیکشنری دارای سه عضو است. به بخش اول هر عضو (سمت چپ کاراکتر دونقطه) کلید (key) و به بخش دوم مقدار (value) می‌گویند. مقادیر یک دیکشنری می‌تواند از انواع مختلف باشد.

دیکشنری را می‌توان با کلمه کلیدی dict ایجاد کرد.

مثال:

huawei = dict(model= “y5”, price= 1500, year=2019)
print(huawei[“model”])

خروجی:

y5

می‌توان دیکشنری‌ها به صورت تودرتو تعریف کرد. یعنی یک دیکشنری از دیکشنری‌ها.

مثال:

phones = {
    “phone1”: {
        “brand”: “huawei”,
        “model”: “y5”,
        “price”: 1500
    },
    “phone2”: {
        “brand”: “samsung”,
        “model”: “A20”,
        “price”: 1450
    }
}
print(phones[“phone1”][“brand”])

خروجی:

‘huawei’

همان‌طور که در مثال‌ها دیده شد برای دسترسی به عناصر یک دیکشنری از نام کلید آن درون کاراکتر براکت استفاده می‌کنیم. این کار را با استفاده از متد get هم می‌توانیم انجام دهیم.

مثال:

huawei = dict(model= “y5”, price= 1500, year=2019)
print(huawei.get(“price”))

خروجی:

1500

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

در مثال قبل:

print(huawei[“color”])
print(huawei.get(“color”))

خروجی:

KeyError: 'color'
None

با استفاده از متدهای keys و values می‌توان به کلیدها و مقادیر دیکشنری دسترسی داشت.

مثال:

huawei = dict(model= “y5”, price= 1500, year=2019)
k = huawei.keys()
v = huawei.values()
print(k)
print(type(k))
print(v)
print(type(v))

خروجی:

dict_keys(['model', 'price', 'year'])
<class 'dict_keys'>
dict_values(['y5', 1500, 2019])
<class 'dict_values'>

کلاس‌های dict_keys و dict_values اشیایی (object) مشابه با مجموعه (set) هستند. بنابراین برای پیمایش روی آنها از حلقه for استفاده می‌کنیم. همچنین درصورتی که دیکشنری ویرایش شود یا کلید-مقداری به آن اضافه شود متغیرهای k و v در مثال قبل خود به خود بروز می‌شوند و فقط یک نمایش از کلیدها و مقدارها هستند.

در ادامه مثال قبل:

huawei[“color”] = “black”
print(k)
print(v)

خروجی:

dict_keys(['model', 'price', 'year', ‘color’])
dict_values(['y5', 1500, 2019, ‘black’])

بروزرسانی دیکشنری

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

مثال:

user = {“first_name”: “Sara”, “last_name”: “Razavi”}
user[“last_name”] = “Rezvani”
user[“email”] = “sara2021@test.com”
print(user)

خروجی:

{'first_name': 'Sara', 'last_name': 'Rezvani', 'email': 'sara2021@test.com'}

همین کار را با متد update نیز می‌توان انجام داد.

مثال:

user = {“first_name”: “Sara”, “last_name”: “Razavi”}
user.update({“last_name”: “Rezvani”, “email”: “sara2020@test.com”})

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

مثال:

user = {
    “first_name”: “Sara”,
    “last_name”: “Rezvani”,
    “age”: 52
}
x = user.pop(“age”)
print(x)
print(user)

خروجی:

52
{‘first_name’: ‘Sara’, ‘last_name’: ‘Rezvani’}

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

در مثال قبل:

del user[“age”]

با کلمه کلیدی del می‌توان دیکشنری را کاملا از بین برد.

مثال:

del user
print(user)

خروجی:

NameError: name 'user’ is not defined

با متد clear دیکشنری را خالی می‌کنیم. در این حالت متغیر حذف نمی‌شود. آنچه که باقی می‌ماند یک دیکشنری خالی است.

مثال:

user.clear()
print(user)

خروجی:

{}

پیمایش دیکشنری

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

مثال:

user = {
‘first_name’: ‘Sara’,
‘last_name’: ‘Rezvani’,
‘age’:52
}
for x in user:
    print(“{}: {}”.format(x, user[x]))

خروجی:

first_name: Sara
last_name: Rezvani
age: 52

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

در مثال قبل:

 for x, y in user.items():
    print(“{}: {}”.format(x, y))

کپی کردن دیکشنری

با عملگر = نمی‌توان یک دیکشنری را در دیکشنری دیگر کپی کرد. با این‌کار دیکشنری دوم صرفا یک ارجاع (reference) به دیکشنری اول خواهد بود. بنابراین با تغییر مقادیر دیکشنری اول، دیکشنری دوم نیز تغییر خواهد کرد. راه درست برای کپی کردن یک دیکشنری در دیکشنری دیگر استفاده از متد copy است.

مثال:

user = {
‘first_name’: ‘Sara’,
‘last_name’: ‘Rezvani’,
‘age’:52
}
user2 = user.copy()

راهکار دیگر استفاده از کلمه کلیدی dict است.

در مثال قبل:

user2 = dict(user1)