توضیح dictionary در پایتون

August 2021


در پایتون dictionaryها یک نوع دنباله نامنظمِ تغییرپذیر هستند که آیتم ها را به شکل کلید/مقدار ذخیره میکنند. معمولاً برای نگهداری داده های مرتبط، مانند اطلاعات موجود در ID یا مشخصات کاربر، دیکشنری‌ها با آکولاد در هر دو طرف {} ساخته می شوند.

 

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

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

 

علاوه بر آکولادها، کلون (:) نیز در سراسر دیکشنری وجود دارد.

 

کلمات سمت چپ کولونها کلیدها هستند. کلیدها را می توان از هر نوع داده تغییر ناپذیری تشکیل داد. کلیدهای دیکشنری بالا عبارتند از:

 

هر یک از کلیدهای مثال بالا مقادیر رشته هستند.

 

کلمات سمت راست کولون‌ها مقادیر هستند. مقادیر را می توان از هر نوع داده تشکیل داد. مقادیر موجود در دیکشنری بالا عبارتند از:

 

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

 

بیایید دیکشنری sammy را چاپ کنیم:

print(sammy)


# OUTPUT
{'username': 'sammy-shark', 'followers': 987, 'online': True}

 

با نگاه به خروجی ، ترتیب جفت کلید-مقدار تغییر کرده است. در پایتون نسخه 3.5 و قبل از آن ، نوع داده دیکشنری نامرتب است. با این حال ، در پایتون نسخه 3.6 و بالاتر ، نوع داده دیکشنری مرتب باقی می ماند. صرف نظر از اینکه دیکشنری مرتب شده باشد یا خیر، جفت کلید-مقدار دست نخورده باقی می ماند و ما را قادر می سازد تا بر اساس معنای رابطه ای آنها به داده ها دسترسی پیدا کنیم.

 

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

از آنجا که دیکشنری ها جفت کلید-مقدار برای ذخیره داده ها ارائه می دهند ، می توانند عناصر مهمی در برنامه پایتون شما باشند.

 

اگر می خواهیم نام کاربری Sammy را جدا کنیم ، می توانیم با فراخوانی sammy ['username'] این کار را انجام دهیم. بیایید آن را چاپ کنیم:

print(sammy['username'])


# OUTPUT
sammy-shark

 

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

 

با فراخوانی کلید "username" ، مقدار آن کلید را که "sammy-shark" است دریافت می کنیم.

 

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

sammy['followers']
# Returns 987

sammy['online']
# Returns True

 

با استفاده از جفت های کلید-مقدار دیکشنری، می توانیم کلیدها را برای بازیابی مقادیر ارجاع دهیم.

 

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

علاوه بر استفاده از کلیدها برای دسترسی به مقادیر ، می توانیم با برخی از متدهای داخلی نیز کار کنیم:

 

برای بازگشت کلیدها ، از متد () dict.keys استفاده می کنیم. در مثال ما ، از نام متغیر استفاده می شود و sammy.keys () می باشد. بیایید آن را به متد print () منتقل کنیم و خروجی را نگاه کنیم:

print(sammy.keys())

# OUTPUT
dict_keys(['followers', 'username', 'online'])

 

خروجی دریافت می کنیم که کلیدها را در یک شیء نمای تکراری از کلاس dict_keys قرار می دهد. سپس کلیدها در قالب یک لیست چاپ می شوند.

 

از این روش می توان برای پرس و جو در دیکشنری‌ها استفاده کرد. به عنوان مثال ، می توانیم به کلیدهای مشترک بین دو ساختار داده دیکشنری نگاهی بیندازیم:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}
jesse = {'username': 'JOctopus', 'online': False, 'points': 723}

for common_key in sammy.keys() & jesse.keys():
    print(sammy[common_key], jesse[common_key])

 

دیکشنری sammy و دیکشنری jesse هر کدام یک دیکشنری مشخصات کاربر هستند.

 

پروفایل آنها دارای کلیدهای متفاوتی است ، زیرا Sammy دارای یک پروفایل اجتماعی با دنبال کنندگان مرتبط است و Jesse دارای یک پروفایل بازی با نقاط مرتبط است. دو کلید مشترک آنها username و online است که هنگام اجرای این برنامه کوچک می توانیم آنها را پیدا کنیم:

sammy-shark JOctopus
True False

 

مطمئناً می توانیم برنامه را بهبود بخشیم تا خروجی خواناتر شود ، اما این نشان می دهد که dict.keys () می تواند برای بررسی در دیکشنری‌های مختلف مورد استفاده قرار گیرد تا ببیند آنها مشترک هستند یا خیر. این به ویژه برای دیکشنری های بزرگ مفید است.

 

به طور مشابه ، می توانیم از روش dict.values () برای پرسیدن مقادیر در فرهنگ لغت sammy ، که به عنوان sammy.values () ساخته می شود ، استفاده کنیم. بیایید آنها را چاپ کنیم:

sammy = {'username': 'sammy-shark', 'online': True, 'followers': 987}

print(sammy.values())


# OUTPUT
dict_values([True, 'sammy-shark', 987])

 

 متدهای keys() و values() لیست های مرتب نشده ای از کلیدها و مقادیر موجود در دیکشنری sammy را به ترتیب با اشیاء نمای dict_keys و dict_values برمی گردانند.

 

اگر به همه موارد موجود در دیکشنری علاقه مند باشیم ، می توانیم با متد () items به آنها دسترسی پیدا کنیم:

print(sammy.items())

# OUTPUT
dict_items([('online', True), ('username', 'sammy-shark'), ('followers', 987)])

 

قالب بازگردانده شده لیستی است که از جفت (کلید-مقدار) ، شیء dict_items تشکیل شده است.

 

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

for key, value in sammy.items():
    print(key, 'is the key for the value', value)


# OUTPUT
online is the key for the value True
followers is the key for the value 987
username is the key for the value sammy-shark

 

حلقه for بالا روی موارد درون دیکشنری sammy تکرار شد و کلیدها و مقادیر را خط به خط چاپ کرد ، با اطلاعاتی که درک آن را برای انسان آسان تر می کند.

 

تغییر دادن دیکشنری‌ها در پایتون

دیکشنری‌ها یک ساختار داده تغییرپذیر هستند ، بنابراین می توانید آنها را تغییر دهید. در این بخش ، به افزودن و حذف عناصر دیکشنری می پردازیم.

 

بدون استفاده از متد یا تابع ، می توانید با استفاده از نحو زیر ، جفت مقدار کلید را به دیکشنری ها اضافه کنید:

dict[key] = value

 

با افزودن یک جفت مقدار کلیدی به دیکشنری به نام usernames ، نحوه عملکرد آن را در عمل بررسی می کنیم:

usernames = {'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

usernames['Drew'] = 'squidly'

print(usernames)


# OUTPUT
{'Drew': 'squidly', 'Sammy': 'sammy-shark', 'Jamie': 'mantisshrimp54'}

 

اکنون می بینیم که دیکشنری با جفت کلید "Drew": "squidly" به روز شده است. از آنجا که ممکن است دیکشنری ها مرتب نشده باشند ، ممکن است این جفت در هر جایی از خروجی دیکشنری ظاهر شود. اگر بعداً در فایل برنامه خود از دیکشنری usernames استفاده کنیم ، این جفت شامل کلید و مقدار اضافی می شود.

 

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

 

بیایید یک دیکشنری drew را در نظر بگیریم که یکی از کاربران یک شبکه معین است. ما می گوییم که این کاربر امروزه در دنبال کنندگان دچار مشکل شده است ، بنابراین باید مقدار صحیح منتقل شده به کلید "followers" را به روز کنیم. ما از تابع print () برای بررسی اینکه آیا دیکشنری تغییر کرده است ، استفاده می کنیم.

 

drew = {'username': 'squidly', 'online': True, 'followers': 305}

drew['followers'] = 342

print(drew)

# OUTPUT
{'username': 'squidly', 'followers': 342, 'online': True}

 

در خروجی ، می بینیم که تعداد پیروان از عدد صحیح 305 به 342 افزایش یافته است.

 

حذف مقادیر از یک دیکشنری

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

 

برای حذف یک جفت مقدار کلید از دیکشنری، از نحو زیر استفاده می کنیم:

del dict[key]

 

بیایید دیکشنری jesse را که نماینده یکی از کاربران است، در نظر بگیریم. ما می گوییم که جسی دیگر از پلت فرم آنلاین برای بازی کردن استفاده نمی کند ، بنابراین ما مورد مرتبط با کلید "points" را حذف می کنیم. سپس ، برای تأیید حذف شدن مورد ، dictionary را چاپ می کنیم:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

del jesse['points']

print(jesse)


# OUTPUT
{'online': False, 'username': 'JOctopus', 'followers': 481}

 

خط del jesse ['points'] جفت کلید 'point': 723 را از دیکشنری jesse حذف می کند.

 

اگر ما می خواهیم دیکشنری را از همه مقادیر آن پاک کنیم ، می توانیم با روش () dict.clear این کار را انجام دهیم. این یک دیکشنری را در صورت نیاز به استفاده از آن بعداً در برنامه نگه می دارد ، اما دیگر هیچ موردی را شامل نمی شود.

 

بیایید همه موارد موجود در دیکشنری jesse را حذف کنیم:

jesse = {'username': 'JOctopus', 'online': False, 'points': 723, 'followers': 481}

jesse.clear()

print(jesse)


# OUTPUT
{}

 

خروجی نشان می دهد که ما در حال حاضر یک دیکشنری خالی داریم.

 

اگر دیگر نیازی به دیکشنری خاصی نداریم ، می توانیم از del برای خلاص شدن کامل از آن استفاده کنیم:

del jesse

print(jesse)

 

وقتی پس از حذف دیکشنری jesse سعی میکنیم  print() بگیریم، خطای زیر را دریافت می کنیم:

...
NameError: name 'jesse' is not defined

 

از آنجا که دیکشنری ها انواع داده های متغیر هستند ، می توان آنها را اضافه ، اصلاح و مواردی را حذف و پاک کرد.


5:49:03


0

intro

10:38

رایگان

1

variable

13:57

رایگان

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

functions

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

working with file

17:14

رایگان

18

scope

6:25

رایگان

19

class

12:15

رایگان

20

methods

20:19

رایگان

21

class 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

exception

21:17

رایگان

28

standard library

12:51

رایگان

29

docString

10:49

رایگان

30

virtualenv

11:2

رایگان


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

دوره آموزش مقدماتی جنگو

دوره آموزش مقدماتی جنگو

دوره اول آموزش پروژه محور پایتون

دوره اول آموزش پروژه محور پایتون

دوره آموزش DRF

دوره آموزش DRF

ارسال نظر

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