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

May 2022


# معرفی دیکشنری در پایتون

در این ویدیو با نوع داده دیکشنری پایتون آشنا میشوید. از دیکشنری‌ برای ذخیره اطلاعات به شکل key:value استفاده میشود. هر key با دو نقطه از value جدا شده و آیتم‌های دیکشنری با کاما از هم جدا میشوند. تمام آیتم‌ها هم در یک جفت آکولاد { } قرار میگیرند. دیکشنری‌ها یکی از پرکاربردترین ساختارهای داده هستند که در پایتون وجود دارد.

 

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

 

هر key در دیکشنری باید منحصر به فرد باشد اما value میتواند تکراری باشد. value میتواند هر چیزی باشد اما key باید نوع داده تغییر ناپذیر مانند string, int یا tuple باشد.

 

دیکشنری و لیست پایتون در موارد زیر شبیه به هم هستند:

 

دیکشنری و لیست در نحوه دسترسی به آیتم‌ها متفاوت عمل میکنند:

 

در پایتون قبل از نسخه 3.7 دیکشنری‌های پایتون نامرتب(unordered) بودند یعنی پایتون ترتیب ورود آیتم‌ها را حفظ نمیکرد و بنابراین نمیتوانستید از شماره index برای دسترسی به آیتم‌ها استفاده کنید. اما در پایتون 3.7 این قضیه تغییر کرده و دیکشنری‌های پایتون مرتب(ordered) شدند و میتوانید از شماره index برای دسترسی به آیتم‌ها استفاده کنید.

 

 

# ساخت دیکشنری

برای ساخت دیکشنری‌های پایتون از آکولاد استفاده میشود. آیتم‌ها با استفاده از کاما از یکدیگر جدا شده و key با یک دونقطه از value جدا میشود. به طور مثال در کد پایین، نام و سن کاربر را در یک دیکشنری ذخیره کرده‌ایم:

a = {'name':'amir', 'age':20}
print(a)

# OUTPUT
{'name':'amir', 'age':20}

 

در کد بالا، یک دیکشنری به نام a ساخته و مقادیر name و age را در آن ذخیره کردیم. در آخر با چاپ دیکشنری توانستیم تمام آن را در خروجی ببینیم.

 

 

+ متد dict

روش دیگری که میتوانید برای ساخت دیکشنری در پایتون از آن استفاده کنید، متد dict است. این متد مقادیر را به شکل key:value قبول میکند. مثلا لیستی از تاپل‌ها را گرفته و آنها را تبدیل به دیکشنری میکند. این روش با روش قبل هیچ فرقی نمیکند و از هر کدام که خواستید میتوانید استفاده کنید. در کد زیر، دیکشنری بالا را با متد dict میسازیم:

a = dict([ ('name', 'amir'), ('age', 20) ])
print(a)

# OUTPUT
{'name': 'amir', 'age': 20}

 

در کد بالا، لیستی از تاپل‌ها را به متد dict ارسال میکنیم. بعد از چاپ دیکشنری، میبینید که نتیجه هیچ فرقی به روش قبلی ندارد. همچنین میتوانید مقادیر را به طور مستقیم به عنوان آرگومان نیز به متد dict ارسال کنید که در اینصورت key را به string تبدیل میکند:

a = dict(name='amir', age=10)
print(a)

# OUTPUT
{'name': 'amir', 'age': 10}

 

باز هم نتیجه فرقی نمیکند.

 

 

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

برای دسترسی به مقادیری که در دیکشنری وجود دارد میتوانید از براکت استفاده کرده و در داخل آن نام key را مشخص کنید. در کد پایین مشخص کردیم که مقدار کلید name را از دیکشنری a نیاز داریم:

print(a['name'])
# amir

نتیجه این کد مقدار کلید name است. دقت کنید که فقط مقدار را برمیگرداند بدون نام کلید.

 

اگر سعی کنید مقدار کلیدی را درخواست کنید که وجود ندارد با ارور KeyError مواجه خواهید شد:

a = {'name':'amir', 'age':10}
print(a['car'])

# OUTPUT 
Traceback (most recent call last):
  File "/home/amir/Desktop/python/two.py", line 4, in <module>
    print(a['car'])
KeyError: 'car'

از آنجایی که کلید به نام car در دیکشنری a وجود ندارد، پایتون پیغام خطا را نمایش میدهد.

 

 

# حذف، تغییر و اضافه کردن آیتم به دیکشنری

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

a = {'name':'amir', 'age':10}
a['name'] = 'jack'
print(a['name'])

# OUTPUT
jack

در کد بالا، مقدار name را از amir به jack تغییر دادیم.

 

برای اضافه کردن یک آیتم جدید باید از نام key جدید استفاده کنید. به طور مثال در کد زیر مقدار car را به اطلاعات کاربر اضافه میکنیم:

a = {'name':'amir', 'age':10}
a['car'] = 'pride'
print(a)

# OUTPUT
{'name': 'amir', 'age': 10, 'car': 'pride'}

 

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

 

برای حذف یک مقدار دیکشری از متد del در کنار نام کلید استفاده میکنید. در کد زیر کلید name به همراه مقدار آن حذف خواهد شد:

del a['name']

 

برای حذف تمام آیتم‌های دیکشنری و خالی کردن آن دیکشنری، از متد clear استفاده کنید:

a = {'name':'amir', 'age':10}
a.clear()
print(a)

# OUTPUT
{}

 

در آخر برای حذف کل دیکشنری از متد del بدون نام کلید استفاده کنید. اینکار باعث شود به طور کامل دیکشنری حذف شود:

del a

 

 

# مهم ترین متدهای مربوط به دیکشنری پایتون

همانند list و string، نوع داده دیکشنری نیز دارای یکسری متدهای داخلی است که میتوانید از آنها برای کنترل بیشتر دیکشنری‌ها استفاده کنید. برخی از این متدها نامی مشابه با متدهای لیست دارند. در تمام این مثال‌ها ما از دیکشنری زیر استفاده میکنیم:

a = {'name':'amir', 'age':10}

 

 

+ متد clear

از متد clear برای خالی کردن محتویات یک دیکشنری استفاده میشود:

>>> a.clear()
>>> a
{}

 

 

+ متد get

متد get یک مقدار را از داخل دیکشنری بازیابی میکند. اگر مقدار درخواستی وجود نداشته باشد، مقدار پیشفرض را برمیگرداند. ساختار کلی متد get به شکل زیر است:

get(<key>[, <default>])

 

مقدار پیشفرض در متد get برابر با None است اما میتوانید آن را تغییر دهید:

>>> a.get('name')
amir

>>> a.get('car')
None

>>> a.get('car', 'empty')
empty

 

 

+ متد items

متد items اطلاعات داخل دیکشنری را به شکل لیستی از تاپل‌ها برمیگرداند. اولین آیتم تاپل key و دومین آیتم تاپل value است:

>>> a.items()
dict_items([('name', 'amir'), ('age', 10)])

 

 

+ متد keys

از متد keys برای بازیابی تمام کلیدهای یک دیکشنری استفاده میشود:

>>> a.keys()
dict_keys(['name', 'age'])

 

 

+ متد values

متد values برای بازیابی تمام مقادیر یک دیکشنری استفاده میشود:

>>> a.values()
dict_values(['amir', 10])

 

 

+ متد pop

متد pop یک کلید را از دیکشنری حذف کرده و مقدار حذف شده را return میکند. اگر کلید درخواستی وجود نداشته باشد، مقدار پیشفرض را برمیگرداند. ساختار کلی متد pop به این شکل است:

pop(<key>[, <default>])

 

مقدار پیشفرض در متد pop برابر با None است اما میتوانید آن را تغییر دهید:

>>> a.pop('name')
amir

>>> a.pop('car')
None

>>> a.pop('car', 'empty')
empty

 

 

+ متد popitem

متد popitem آخرین آیتم را از دیکشنری حذف کرده و مقدار حذف شده را برمیگرداند. اگر دیکشنری خالی باشد ارور KeyError رخ میدهد:

>>> a.popitem()
('age', 10)

>>> a.popitem()
('name', 'amir')

>>> a.popitem()
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    a.popitem()
KeyError: 'popitem(): dictionary is empty'

 

 

+ متد update

از متد update برای ترکیب یک دیکشنری با دیکشنری دیگری استفاده میشود. ساختار کلی متد update یه شکل زیر است:

update(<obj>)

 

اگر obj یک دیکشنری باشد، متد update تمام دیکشنری را با obj ترکیب میکند:

>>> d1 = {'a': 10, 'b': 20, 'c': 30}
>>> d2 = {'b': 200, 'd': 400}

>>> d1.update(d2)
>>> d1
{'a': 10, 'b': 200, 'c': 30, 'd': 400}

 

اگر obj یک دنباله از داده‌های دیگر باشد، همانند متد dict آن را به یک دیکشنری تبدیل کرده و ترکیب میکند:

>>> d1 = {'a': 10, 'b': 20, 'c': 30}
>>> d1.update([('b', 200), ('d', 400)])
>>> d1
{'a': 10, 'b': 200, 'c': 30, 'd': 400}

 

در زمان استفاده از متد update:

 

 

# بررسی وجود آیتم در دیکشنری

برای اینکه بررسی کنید که آیا یک key در یک دیکشنری وجود دارد یا خیر، میتوانید از کلمه کلیدی in استفاده کنید. دقت کنید که این بررسی فقط برای key استفاده میشود و روی value کار نخواهد کرد:

>>> a = {'name':'amir', 'age':10}
>>> 'name' in a
True

>>> 'car' in a
False

همانطور که در کد بالا میبیند اگر یک key در دیکشنری باشد مقدار True و اگر key در دیکشنری نباشد مقدار False برگشت داده میشود.

 

 

# استفاده از دیکشنری در یک حلقه

دیکشنری ها یک ساختار داده مفید و پرکاربرد در پایتون هستند. به‌عنوان یک توسعه دهنده پایتون، اغلب در موقعیت‌هایی قرار می‌گیرید که باید در یک دیکشنری پایتون پیمایش کرده و بر روی key یا value کار خاصی انجام دهید. خوشبختانه در پایتون روش‌های مختلفی برای پیمایش در دیکشنری‌ها وجود دارد.

 

 

+ پیمایش در آیتم‌های دیکشنری

با استفاده از ویژگی items میتوانید مستقیما به آیتم‌های دیکشنری دسترسی داشته باشید. هر آیتم شامل یک key و value خواهد بود:

>>> a = {'name':'amir', 'age':10}

>>> for item in a.items():
>>> 	print(item)

('name', 'amir')
('age', 10)

 

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

>>> a = {'name':'amir', 'age':10}

>>> for k, v in a.items():
>>> 	print(k, v)

name amir
age 10

در کد بالا k نماینده‌ key و v نماینده value دیکشنری است.

 

 

+ پیمایش در کلیدهای دیکشنری

اگر فقط به کلیدها نیاز دارید، میتوانید از keys استفاده کنید. این متد لیستی از کلیدهای دیکشنری را به شما برمیگرداند:

>>> a = {'name':'amir', 'age':10}
>>> print(a.keys())

dict_keys(['name', 'age'])

 

میتوانید از keys در یک حلقه هم استفاده کنید:

>>> a = {'name':'amir', 'age':10}

>>> for key in a.keys():
>>> 	print(key)

name
age

 

 

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

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

>>> a = {'name':'amir', 'age':10}
>>> a.values()

dict_values(['amir', 10])

 

میتوانید از values در حلقه هم استفاده کنید:

>>> a = {'name':'amir', 'age':10}

>>> for value in a.values():
>>> 	print(value)

amir
10

همانطور که در کد بالا میبینید، متد vlaues فقط مقادیر ذخیره شده در دیکشنری را برمیگرداند.


5:47:36


0

Intro

10:38

رایگان

1

Variable

12:30

رایگان

2

String

19:22

رایگان

3

List

8:46

رایگان

4

While

9:6

رایگان

5

If

8:37

رایگان

6

For

6:12

رایگان

7

range

4:17

رایگان

8

break, continue, pass

9:15

رایگان

9

Function

12:32

رایگان

10

List methods

12:11

رایگان

11

Tuple

8:29

رایگان

12

Set

7:47

رایگان

13

Dictionary

9:19

رایگان

14

Module

10:40

رایگان

15

fstring

5:35

رایگان

16

format

7:34

رایگان

17

File

17:14

رایگان

18

Scope

6:25

رایگان

19

OOP

12:15

رایگان

20

Method

20:19

رایگان

21

class/instance variable

14:7

رایگان

22

class/static method

13:25

رایگان

23

Inheritance

17:6

رایگان

24

Special methods

9:50

رایگان

25

Access points

11:12

رایگان

26

property

6:54

رایگان

27

Exceptions

21:17

رایگان

28

Standard library

12:51

رایگان

29

Docstring

10:49

رایگان

30

Virtualenv

11:2

رایگان


دوره‌های پیشنهادی

دوره اول آموزش جنگو(django)

دوره اول آموزش جنگو(django)

دوره آموزش GraphQL در پایتون

دوره آموزش GraphQL در پایتون

دوره آموزش Celery

دوره آموزش Celery

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم